WPF绑定兄弟集合到子ListBox控件

时间:2014-07-18 16:38:15

标签: c# wpf xaml

这有点难以解释,但我会尽我所能。我有一个ViewModel对象,它包含两个集合。

public class ParentViewModel
{
    public ObservableCollection<Child1> ChildCollection1 {get;set;} 
    public ObservableCollection<Child2> ChildCollection2 { get;set; }
}

在XAML视图文件中,datacontext的设置如下所示:

// populate the child1 and child 2 collections
this.DataContext = ParentViewModel;

在XAML代码中,一切都在DataGrid控件中。 DataGrid控件的ItemsSource设置为Child1Collection,因为子对象具有一些需要在大多数datagrid列中显示的字段。 DataGrid的其中一列是ListBox控件。我希望ListBox控件使用Child2Collection作为ItemsSource。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

您可以使用ElementNameRelativeResource

例如

使用ElementName

<DataGrid x:Name="dGrid"
          ItemsSource="{Binding ChildCollection1}">
    <DataGrid.Columns>
        <DataGridTemplateColumn>
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ListBox ItemsSource="{Binding DataContext.ChildCollection2,ElementName=dGrid}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

使用RelativeSource

<DataGrid ItemsSource="{Binding ChildCollection1}">
    <DataGrid.Columns>
        <DataGridTemplateColumn>
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ListBox ItemsSource="{Binding DataContext.ChildCollection2,RelativeSource={RelativeSource FindAncestor,AncestorType=DataGrid}}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>