首页 文章

WPF DataGrid:将列绑定到源集合的不同级别

提问于
浏览
0

如何绑定WPF DataGrid以获得以下结果:http://i.stack.imgur.com/7Wne0.png

请注意左侧所需的/ - 按钮 .
DataGrid的ItemsSource绑定到IEnumerable of Document .

问题是如何定义列,以便它们绑定到第二级和第三级对象并获得展开/折叠按钮 .
我不希望在父项的RowDetail中定义的Group和Field项具有第二个和第三个网格 .
目标是拥有一个DataGrid,一行列 Headers 以及扩展当前行的子元素(如果有)的能力 .

public class Document
{
    public string Name { get; set; }
    public IEnumerable<Group> Groups { get; set; }
}

public class Group
{
    public string Name { get; set; }
    public IEnumerable<Field> Fields { get; set; }
}

public class Field
{
    public string Name { get; set; }
    public FieldType FieldType { get; set; }
    public bool IsRequired { get; set; }
}

2 回答

  • 0

    只需绑定到属性即 .

    请注意,您的所有类都必须实现INotifyPropertyChanged . 所有属性都应该引发广泛记录的PropertyChanged . 您的馆藏应该是ObservableCollections .

  • 0

    我在这里找到的唯一技巧是使用带有模板列的嵌套数据网格,没有用于平滑视图的 Headers .

    在代码中:

    DocumentGrid.ItemsSource = YourDocument;
    

    XAML:

    <DataGrid x:Name="DocumentGrid" AutoGenerateColumns="False">
      <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding Name}" Header="Document"/>
        <DataGridTemplateColumn Header="Group       Field      FieldType  IsRequired">
          <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
              <DataGrid x:Name="dgInner" ItemsSource="{Binding Groups}" AutoGenerateColumns="False"  GridLinesVisibility="None" BorderThickness="0" HeadersVisibility="None">
                <DataGrid.Columns>
                  <DataGridTextColumn Header="Group" Binding="{Binding Name}"/>
    
                  <DataGridTemplateColumn Header="Field">
                    <DataGridTemplateColumn.CellTemplate>
                      <DataTemplate>
                        <DataGrid x:Name="dgInnerInner" ItemsSource="{Binding Fields}" AutoGenerateColumns="False" GridLinesVisibility="None"  BorderThickness="0" HeadersVisibility="None">
    
                          <DataGrid.Columns>
                            <DataGridTextColumn Header="Field" Binding="{Binding Name}"/>
                            <DataGridTextColumn Header="FieldType" Binding="{Binding FieldType}"/>
                            <DataGridTextColumn Header="IsRequired" Binding="{Binding IsRequired}"/>
                          </DataGrid.Columns>
    
                        </DataGrid>
                      </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                  </DataGridTemplateColumn>
                </DataGrid.Columns>
    
              </DataGrid>
            </DataTemplate>
          </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    
      </DataGrid.Columns>
    
    </DataGrid>
    

    编辑如果你想 - 按钮折叠细节你应该使用DataGrid的RowDetailsTemplate,如描述here

相关问题