如何绑定到对象列表

本文关键字:对象 列表 绑定 何绑定 | 更新日期: 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 并做出相应的反应。