如何将列表视图绑定到我的嵌套对象

本文关键字:我的 嵌套 对象 绑定 视图 列表 | 更新日期: 2023-09-27 18:36:00

我在将 ListView DataTemplate 绑定到具有非常嵌套属性的可观察集合时遇到问题。我尝试使用{Binding Trip.LegList.Leg.name}绑定,但这不起作用。绑定这样的东西的最简单方法是什么?

_currentTripDataTrip 类型的ObservableCollection

<ListView Name="ui_tripview_triplist"
                  ItemsSource="{Binding _currentTripData}">
           <ListView.ItemTemplate>
               <DataTemplate>
                   <TextBlock>
                       <Run Text="{Binding Trip.LegList.Leg.name}" />
                   </TextBlock>
               </DataTemplate>
           </ListView.ItemTemplate> 
        </ListView>

这就是我最初尝试绑定它的方式,但没有奏效。这是我正在使用的类(从 JSON 转换而来)。

public class Leg
{
    public Origin Origin { get; set; }
    public Destination Destination { get; set; }
    public Stops Stops { get; set; }
    public string name { get; set; }
}
public class LegList
{
    public List<Leg> Leg { get; set; }
}

public class Trip
{
    public List<ServiceDay> ServiceDays { get; set; }
    public LegList LegList { get; set; }
}

这有点乱,但这就是我被赋予使用的对象......

如何将列表视图绑定到我的嵌套对象

有几个问题:

1) 您将绑定到行程的可观察集合,因此您无需在绑定中引用行程。您已经处于每个项目的旅行上下文中。

2) LegList.Leg 是一个没有名称属性的列表。 您可以添加一个嵌套的 ListView 并将 ItemSource 绑定到 LegList.Leg(即。 {Binding LegList.Leg})。 然后绑定到每条腿的名称

<ListView Name="ui_tripview_triplist"
                  ItemsSource="{Binding _currentTripData}">
    <ListView.ItemTemplate>
        <DataTemplate>
            <ListView ItemsSource="{Binding LegList.Leg}">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <TextBlock>
                            <Run Text="{Binding name}" />
                        </TextBlock>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
        <DataTemplate>
    </ListView.ItemTemplate> 
</ListView>

LegList 是一个列表,因此绑定到 Trip.LegList.Leg.name 不起作用。例如,在你的例子中,工作将是Trip.LegList.Leg[0].name。但我认为这不是你想要的。

我认为你想做的是:将列表视图的项源设置为 _currentTripData.LegList,并将绑定到运行到 text={绑定名称}

相关文章: