C# 如何绑定到对象列表

C# 如何绑定到对象列表,c#,.net,wpf,xaml,C#,.net,Wpf,Xaml,我的要求是需要将用户控件绑定到对象的属性,该对象的列表包含在不同的对象中,第二个对象的列表设置为ItemsSource 范例 class A { public string Name { get; set; } } class B { public List<A> aObjectList; } List<B> bObjectsList = new List<B>(); userControl.Item

我的要求是需要将用户控件绑定到对象的属性,该对象的列表包含在不同的对象中,第二个对象的列表设置为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");
A类
{
公共字符串名
{
获得;设置;
}
}
B类
{
公共列表对象列表;
}
List bObjectsList=新列表();
userControl.ItemSource=bObjectsList;
userControl.Content=新绑定(“名称”);

如何执行上述操作?

首先,如果您希望允许GUI在发生更改时进行自我更新,则应使用
NotifyCollectionChanged
的实现,例如
observeCollection

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>
一个好主意是查看MVVM模式。这将提供一个更结构化的解决方案,允许修改通知等内容


首先,如果您希望允许GUI在某些内容发生更改时进行自我更新,则应使用
NotifyCollectionChanged
的实现,例如
observeCollection

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>
一个好主意是查看MVVM模式。这将提供一个更结构化的解决方案,允许修改通知等内容


这不是很清楚,但我想这就是你要问的。你一定会

    bObjectsList[index].aObjectList 
在主细节中,使用以下语法

    ItemsSource="{binding ElementName=cbbObjectsList path=SelectedItem.aObjectList}"

这不是很清楚,但我想这就是你要问的。你一定会

    bObjectsList[index].aObjectList 
在主细节中,使用以下语法

    ItemsSource="{binding ElementName=cbbObjectsList path=SelectedItem.aObjectList}"

似乎对你所要做的事情有很多解释。如果要将列表展平,请使用

List bObjectsList=new List();
userControl.ItemSource=bObjectsList.SelectMany(b=>b.aObjectList);
userControl.Content=新绑定(“名称”);

如果A/B的内容正在更改,您可能会对其使用A/B,并做出相应的反应。

似乎对您尝试执行的操作有很多解释。如果要将列表展平,请使用

List bObjectsList=new List();
userControl.ItemSource=bObjectsList.SelectMany(b=>b.aObjectList);
userControl.Content=新绑定(“名称”);

如果A/B的内容正在更改,您可能会对其使用A/B并做出相应的反应。

是否要将列表展平?(创建一个
A
项目列表)是否要展平该列表?(创建一个
A
项目列表)