我正在编写一个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
。一切都很好。
但是如您所见,DataTemplate2有与DataTemplate1相同的两个单元加上两个附加单元。这只是一个很小的例子。在我的应用程序中,DataTemplate1大约有15列。对于DataTemplate2,还有另外10列。
我现在的问题是:是否有可能继承(大约)来自DataTemplate
中的另一个DataTemplate
中的列并添加其他列?
发布于 2015-04-09 15:28:56
您可以将列添加为资源,并将它们作为资源在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}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</DataTemplate>
发布于 2015-04-09 15:19:22
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
是一个列的集合,您可以随时向其中添加内容。
https://stackoverflow.com/questions/29542303
复制相似问题