如何将列表视图绑定到我的嵌套对象?
How do I bind a listview to my very nested object?
我在将我的 ListView DataTemplate 绑定到具有非常嵌套 属性 的 observablecollection 时遇到问题。
我尝试使用 {Binding Trip.LegList.Leg.name}
进行绑定,但这不起作用。绑定这样的东西最简单的方法是什么?
_currentTripData
是类型 Trip
的 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; }
}
有点乱,但那是我被赋予使用的对象...
LegList 是一个列表,因此无法绑定到 Trip.LegList.Leg.name。例如,在您的情况下,工作将是 Trip.LegList.Leg[0].name。但我认为这不是你想要的。
我想你想做的是:
将 ListView 的 ItemsSource 设置为 _currentTripData.LegList 并将 Binding 设置为 运行 Text={Binding name}
有几个问题:
1) 您正在绑定到 Trip 的 ObservableCollection,因此您不需要在绑定中引用 Trip。您已经处于每个项目的旅行上下文中。
2) LegList.Leg 是一个没有名称 属性 的 List。您可以添加嵌套的 ListView 并将 ItemSource 绑定到 LegList.Leg(即 {Binding LegList.Leg}
)。然后绑定到每个 Leg.
的 name
<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>
我在将我的 ListView DataTemplate 绑定到具有非常嵌套 属性 的 observablecollection 时遇到问题。
我尝试使用 {Binding Trip.LegList.Leg.name}
进行绑定,但这不起作用。绑定这样的东西最简单的方法是什么?
_currentTripData
是类型 Trip
的 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; }
}
有点乱,但那是我被赋予使用的对象...
LegList 是一个列表,因此无法绑定到 Trip.LegList.Leg.name。例如,在您的情况下,工作将是 Trip.LegList.Leg[0].name。但我认为这不是你想要的。
我想你想做的是: 将 ListView 的 ItemsSource 设置为 _currentTripData.LegList 并将 Binding 设置为 运行 Text={Binding name}
有几个问题:
1) 您正在绑定到 Trip 的 ObservableCollection,因此您不需要在绑定中引用 Trip。您已经处于每个项目的旅行上下文中。
2) LegList.Leg 是一个没有名称 属性 的 List。您可以添加嵌套的 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>