这个问题在这里已有答案:
我有一个Datagrid和另一个嵌套在父DataGrid中的DataGrid . 我需要将子DataGrid的ItemSource设置为父DataContext的属性 . 我已经尝试使用RelativeSource作为子itemsource来获取父datacontext .
xaml代码
<DataGrid Grid.Row ="1" x:Name="Grid1" ItemsSource="{Binding Path=md,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Categogy" Width="100" Binding="{Binding Path =CateName,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
<DataGridTemplateColumn Header="Characterictics" Width="300">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<DataGrid ItemsSource="{Binding DataContext.list, RelativeSource={RelativeSource AncestorType=DataGrid}}">
<DataGridTextColumn Binding="{Binding DataContext.list.Name, RelativeSource={RelativeSource AncestorType=DataGrid}}" />
</DataGrid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
视图模型
Model m = new Model();
m.CateName = "CategoryName";
m.list.Add(new Characteristics() { Name="XX", Value="00"});
m.list.Add(new Characteristics() { Name = "XX", Value = "00" });
m.list.Add(new Characteristics() { Name = "XX", Value = "00" });
md.Add(m);
Model m1 = new Model();
m1.CateName = "CategoryName1";
m1.list.Add(new Characteristics() { Name = "XX", Value = "00" });
m1.list.Add(new Characteristics() { Name = "XX", Value = "00" });
m1.list.Add(new Characteristics() { Name = "XX", Value = "00" });
md.Add(m1);
list = new ObservableCollection<Characteristics>();
list.Add(new Characteristics() { Name = "XX", Value = "00" });
list.Add(new Characteristics() { Name = "XX", Value = "00" });
Characteristics类具有Name和Model属性 .
现在,我得到的例外是“在使用ItemsSource之前,项目集合必须为空” .
我不确定我做错了什么?有人可以帮我正确绑定子dataGrid Itemsource吗?
2 回答
我想你可以尝试一下
编辑:如果您更喜欢使用窗口的datacontext中的列表,请将嵌套的datarid更改为
视图模型:
对于嵌套的DataGrid,将
DataGridTextColumn
放入<DataGrid.Columns>
标记中否则DataGridTextColumn被解释为Item并导致itemsSource错误
并且还修复了绑定,它们不需要使用父DataContext