如何绑定到对象列表
本文关键字:对象 列表 绑定 何绑定 | 更新日期: 2023-09-27 18:30:27
我的要求是我需要将用户控件绑定到对象的属性,该对象的列表包含在不同的对象中,并且第二个对象的列表设置为ItemsSource。
例
class A
{
public string Name
{
get; set;
}
}
class B
{
public List<A> aObjectList;
}
List<B> bObjectsList = new List<B>();
userControl.ItemSource = bObjectsList;
userControl.Content = new Binding("Name");
我该如何做上述事情???
首先,如果你想允许GUI在发生更改时自我更新,你应该使用NotifyCollectionChanged
的实现,例如ObservableCollection<T>
。
XAML 将如下所示:
<ItemsControl Name="userControl">
<ItemsControl.ItemTemplate>
<DataTemplate>
<ItemsControl ItemsSource="{Binding aObjectsList}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
也就是说,假设您的用户控件是项控件。然后在代码中执行以下操作:
userControl.ItemsSource = bObjectsList;
一个好主意是查看 MVVM 模式。这将提供一个更有条理的解决方案,允许修改通知等。
这是一篇很好的文章,可以帮助您入门。
这还不是很清楚,但我认为这就是你要问的。 您将绑定到
bObjectsList[index].aObjectList
在主控形状详细信息中,使用以下语法
ItemsSource="{binding ElementName=cbbObjectsList path=SelectedItem.aObjectList}"
似乎对您要做的事情有很多解释。 如果要平展列表,请使用 SelectMany LINQ 方法。
List<B> bObjectsList = new List<B>();
userControl.ItemSource = bObjectsList.SelectMany(b => b.aObjectList);
userControl.Content = new Binding("Name");
如果 A/B 的内容正在更改,您可能会对它们使用 ObservableCollection 并做出相应的反应。