WPF でオブジェクトのコレクションを表示するには、DataGrid を作成する必要があります。コレクションは実行時に提供され、ほとんどの場合は異なります。
オブジェクトのプロパティはさらにコレクションにすることができます。そのため、各セルはそれ自体でサブ DataGrid を表示できる必要があり、これは n 番目のレベルまで拡張できます。
WPF でそのような DataGrid を作成する方法は?
WPF でオブジェクトのコレクションを表示するには、DataGrid を作成する必要があります。コレクションは実行時に提供され、ほとんどの場合は異なります。
オブジェクトのプロパティはさらにコレクションにすることができます。そのため、各セルはそれ自体でサブ DataGrid を表示できる必要があり、これは n 番目のレベルまで拡張できます。
WPF でそのような DataGrid を作成する方法は?
すべてのデータが動的である場合、コード ビハインドで DataGrid を作成し、必要に応じてその列にデータを入力することをお勧めします。あなたに役立つと思うクラスがDataGridTemplateColumn
1つあります。DataTemplate
プロパティを使用して、この列に を割り当てることができCellTemplate
ます。
DataTemplate
これは、XAML またはコード ビハインドを使用して作成できます。もちろん、そのテンプレートには DataGrid を含めることができます。自体をデータバインドすることはできませんがDataGridTemplateColumn
、内部の要素をデータバインドすることはできますDataTemplate
。
例
これは、動的データグリッドが必要な場合はコード ビハインドで行う必要があると述べたように、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>