繁体   English   中英

如何绑定到对象列表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM