这有点难以解释,但我会尽我所能。我有一个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。
我该怎么做?
答案 0 :(得分:1)
您可以使用ElementName
或RelativeResource
例如
使用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>