我想将数据网格绑定到自定义类的observablecollection
假设我有一个A类和B类
Class A
{
public B b {get;set;}
public bool boo {get;set;}
}
和DataGrid为
<DataGrid x:Name="Dg" ItemsSource="{Binding}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridCheckBoxColumn x:Name="DgCheckBoxColumn" Visibility="Collapsed" Width="30" Binding="{Binding Path=boo, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" IsReadOnly="False"/>
<DataGridTextColumn Header="Id" Binding="{Binding Id}" IsReadOnly="True"/>
<DataGridTextColumn Header="Title" Binding="{Binding Title}" IsReadOnly="True"/>
<DataGridTextColumn Header="Type" Binding="{Binding Type}" IsReadOnly="True"/>
</DataGrid.Columns>
</DataGrid>
其他值如Id和title在B类中可用
背后的代码
ObservableCollection<A> a=new ObservableCollection<A>();
DgContent.DataContext = a;
但显示为空
如果将datagrid绑定更改为
Binding="{Binding path=b.Id }"
它显示数据,但在其他地方我将同一网格绑定到B类的ObservableCollection并显示数据,所以我想在两个对象的datacontext之间切换并显示数据
是否可以使用相同的DataGrid进行操作?
答案 0 :(得分:0)
首先,您应该将公共集合属性数据直接绑定到DataGrid.ItemsSource
属性。然后,要将数据绑定到每个项目中的对象,您只需输入公开内部对象的属性的名称(在您的示例中为B
),然后输入项目的相关属性名称。试试这个:
<DataGrid x:Name="Dg" ItemsSource="{Binding YourCollection}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridCheckBoxColumn x:Name="DgCheckBoxColumn" Visibility="Collapsed" Width="30" Binding="{Binding B.IsAvailable, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" IsReadOnly="False"/>
<DataGridTextColumn Header="Id" Binding="{Binding B.Id}" IsReadOnly="True"/>
<DataGridTextColumn Header="Title" Binding="{Binding B.Title}" IsReadOnly="True"/>
<DataGridTextColumn Header="Type" Binding="{Binding B.Type}" IsReadOnly="True"/>
</DataGrid.Columns>
</DataGrid>