高達第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