我正在编写一个 UserControl ,其中包含两个 DataTemplates :
UserControl
DataTemplates
DataTemplate 1
<DataTemplate x:Key="Template1"> <DataGrid ItemsSource="{Binding}" SelectionChanged="DataGridSelectionChanged"> <DataGrid.Columns> <DataGridTemplateColumn Header="FilePath" Width="Auto" SortMemberPath="FilePath"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBlock Padding="4,1" Text="{Binding FilePath}"/> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> <DataGridTemplateColumn Header="FileSize" Width="Auto" SortMemberPath="FileSize"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBlock Padding="4,1" Text="{Binding FileSize}"/> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> </DataGrid.Columns> </DataGrid> </DataTemplate>
DataTemplate2
<DataTemplate x:Key="Template2"> <DataGrid ItemsSource="{Binding}" SelectionChanged="DataGridSelectionChanged"> <DataGrid.Columns> <DataGridTemplateColumn Header="FilePath" Width="Auto" SortMemberPath="FilePath"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBlock Padding="4,1" Text="{Binding FilePath}"/> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> <DataGridTemplateColumn Header="FileSize" Width="Auto" SortMemberPath="FileSize"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBlock Padding="4,1" Text="{Binding FileSize}"/> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> <DataGridTemplateColumn Header="FileCreator" Width="Auto" SortMemberPath="FileCreator"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBlock Padding="4,1" Text="{Binding FileCreator}"/> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> <DataGridTemplateColumn Header="FileCreated" Width="Auto" SortMemberPath="FileCreated"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBlock Padding="4,1" Text="{Binding FileCreated}"/> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> </DataGrid.Columns> </DataGrid> </DataTemplate>
使用 DataTemplateSelector ,我决定应该使用哪个 DataTemplate 。一切都很好。
DataTemplateSelector
DataTemplate
但是如您所见,DataTemplate2有与DataTemplate1相同的两个单元加上两个附加单元。这只是一个很小的例子。在我的应用程序中,DataTemplate1大约有15列。对于DataTemplate2,还有另外10列。
我现在的问题是:是否有可能继承(大约)来自 DataTemplate 中的另一个 DataTemplate 中的列并添加其他列?
618夏日盛惠
2核2G云服务器首年95元,GPU云服务器低至9.93元/天,还有更多云产品低至0.1折…
AFAIK在数据栏中没有继承的可能性,但我的建议是--
因此,您将拥有列1、2、3、4的BaseGrid,然后您可以使用这个baseGrid并在一个模板中添加列5,6,在另一个模板中添加7,8列。将产生两个网格,一个列为1,2,3,4,5,6,另一列为1,2,3,4,7,8
DataGrid.Columns 是一个列的集合,您可以随时向其中添加内容。
DataGrid.Columns
您可以将列添加为资源,并将它们作为资源在DataGrid中引用。确保您应该将它们标记为x:Shared为false,以避免冲突。请参阅下面的代码。
<DataGridTemplateColumn x:Key="FilePath" x:Shared="False" Header="FilePath" Width="Auto" SortMemberPath="FilePath"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBlock Padding="4,1" Text="{Binding FilePath}"/> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> <DataGridTemplateColumn x:Key="FileSize" x:Shared="False" Header="FileSize" Width="Auto" SortMemberPath="FileSize"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBlock Padding="4,1" Text="{Binding FileSize}"/> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> <DataTemplate x:Key="Template1"> <DataGrid ItemsSource="{Binding}" SelectionChanged="DataGridSelectionChanged"> <DataGrid.Columns> <StaticResource ResourceKey="FilePath"/> <StaticResource ResourceKey="FileSize"/> </DataGrid.Columns> </DataGrid> </DataTemplate> <DataTemplate x:Key="Template2"> <DataGrid ItemsSource="{Binding}" SelectionChanged="DataGridSelectionChanged"> <DataGrid.Columns> <StaticResource ResourceKey="FilePath"/> <StaticResource ResourceKey="FileSize"/> <DataGridTemplateColumn Header="FileCreator" Width="Auto" SortMemberPath="FileCreator"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBlock Padding="4,1" Text="{Binding FileCreator}"/> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> <DataGridTemplateColumn Header="FileCreated" Width="Auto" SortMemberPath="FileCreated"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBlock Padding="4,1" Text="{Binding FileCreated}"/>