如何绑定WPF DataGrid以获得以下结果:http://i.stack.imgur.com/7Wne0.png
请注意左侧所需的+/-按钮 DataGrid的ItemsSource绑定到IEnumerable of Document。
问题是如何定义列,以便它们绑定到第二级和第三级对象并获得展开/折叠按钮。
我不希望在父级的RowDetail中定义的Group和Field项目有第二个和第三个网格。
目标是拥有一个DataGrid,一行列标题以及扩展当前行的子元素(如果有)的能力。
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; }
}
答案 0 :(得分:0)
只需绑定到属性即{Binding Document.Group.Name}。
请注意,所有类都必须实现INotifyPropertyChanged。所有属性都应该引发广泛记录的PropertyChanged。 您的馆藏应该是ObservableCollections。
答案 1 :(得分:0)
我在这里找到的唯一技巧是使用带有模板列的嵌套数据网格,没有用于平滑视图的标题。
在代码中:
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>
EDIT 如果你想要+ - 按钮来折叠细节你应该使用DataGrid的RowDetailsTemplate,如描述here