如何将listview绑定到我的嵌套对象?

时间:2016-02-24 17:08:59

标签: c# wpf xaml listview win-universal-app

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

_currentTripDataObservableCollection类型的Trip

<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; }
}

这有点混乱,但那是我给予使用的对象......

2 个答案:

答案 0 :(得分:2)

有几个问题:

1)您绑定了Trips的 ObservableCollection ,因此您无需在绑定中引用 Trip 。您已经在每个项目的旅行环境中。

2)LegList.Leg是一个 List ,它没有name属性。您可以添加嵌套的ListView并将ItemSource绑定到LegList.Leg(即{Binding LegList.Leg})。然后绑定到每个 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>

答案 1 :(得分:0)

LegList是一个列表,因此绑定到Trip.LegList.Leg.name是行不通的。例如,在您的情况下,工作将是Trip.LegList.Leg [0] .name。但我认为这不是你想要的。

我认为你想做的是: 将ListView的ItemsSource设置为_currentTripData.LegList,将绑定设置为Run to Text = {Binding name}