[英]How to Bind to a list of objects
我的要求是我需要将用户控件绑定到 object 的属性,其列表包含在不同的 object 中,第二个 object 的列表设置为 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 是一个 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并做出相应的反应。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.