如何将数据网格绑定到自定义类对象

时间:2015-03-06 13:13:20

标签: c# wpf data-binding datagrid

我想将数据网格绑定到自定义类的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进行操作?

1 个答案:

答案 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>