高达第n层细胞,我需要创建一个DataGrid WPF中显示对象的集合。 收集在运行时发生,并且与大多数情况不同。DataGrid的DataGrid的具有在WPF
的对象的属性还可以是collection.So每个单元应该能够在自身中显示的子数据网格中,并且这可以延长高达第n级。
如何创建WPF这样一个DataGrid?
高达第n层细胞,我需要创建一个DataGrid WPF中显示对象的集合。 收集在运行时发生,并且与大多数情况不同。DataGrid的DataGrid的具有在WPF
的对象的属性还可以是collection.So每个单元应该能够在自身中显示的子数据网格中,并且这可以延长高达第n级。
如何创建WPF这样一个DataGrid?
你可以使用DataGrid控件,并可以将其设置的ItemSource到你想要的每一行中显示的数据的观察的集合。并且对于每一行,您还可以根据需要设置其内容模板。此内容模板的控件数据也可以使用绑定进行设置。
您可以使用分层数据模板来实现此目的。
对于实施例参考下面的MVVM模式的代码。
Model.cs
public class Person
{
ObservableCollection<Person> MyCollection {get; set;}
}
ViewModel.cs
public class PersonModel
{
ObservableCollection Collection {get; set;}
}
XAML代码(视图)
<Window.DataContext>
<local:PersonModel/>
</Window.DataContext>
<Grid>
<DataGrid ItemsSource="{Binding Collection}" >
<DataGrid.RowDetailsTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding SelectedItem.MyCollection}">
<DataGrid RowDetailsTemplate="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGrid}},Path=RowDetailsTemplate}" ItemsSource="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGrid}},Path=SelectedItem.MyCollection}">
</DataGrid>
</HierarchicalDataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
</Grid>
希望这将有助于你.....
如果所有的数据都是动态的,那么我就是ld说,推荐的方法是在代码隐藏方面创建DataGrid,并根据需要填充其列。有一个DataGridTemplateColumn
1类,我认为会帮助你。您可以通过CellTemplate
属性将DataTemplate
分配给此列。
您可以创建XAML通过或DataTemplate
代码隐藏。当然,该模板可以包含一个DataGrid。您将无法绑定DataGridTemplateColumn
本身,但可以对DataTemplate
中的元素进行数据绑定。
DataGridTemplateColumn at MSDN
例
这是如何做到这一点的XAML,就像我说的,如果你需要动态数据网格,那么你必须做的代码隐藏一个简单的例子。我希望这有帮助。
MainWindow.xaml
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:System="clr-namespace:System;assembly=mscorlib" x:Class="TestStackoverflow.MainWindow"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid>
<Grid.Resources>
<!--DataTemplate for Published Date column defined in Grid.Resources. PublishDate is a property on the ItemsSource of type DateTime -->
<DataTemplate x:Key="DateTemplate" >
<DataGrid AutoGenerateColumns="False" >
<DataGrid.Columns>
<DataGridTextColumn Header="Second grid column" Binding="{Binding ''}" ClipboardContentBinding="{x:Null}"/>
</DataGrid.Columns>
<System:String>I heard you like</System:String>
<System:String>datagrids so</System:String>
<System:String>I put a datagrid in</System:String>
<System:String>your data datagrid</System:String>
<System:String>so you can grid while you grid.</System:String>
</DataGrid>
</DataTemplate>
</Grid.Resources>
<DataGrid AutoGenerateColumns="False" >
<DataGrid.Columns>
<DataGridTemplateColumn Header="Original Datagrid DG Column" CellTemplate="{StaticResource DateTemplate}" />
<DataGridTextColumn Header="Original Datagrid Text Column" Binding="{Binding ''}" ClipboardContentBinding="{x:Null}"/>
</DataGrid.Columns>
<System:String>String 1</System:String>
<System:String>String 2</System:String>
<System:String>String 3</System:String>
<System:String>String 4</System:String>
<System:String>String 5</System:String>
</DataGrid>
</Grid>
</Grid>
</Window>
的数据将是动态的。每次我们可以有不同的对象集合。 – Brij