我如何继承DataGrid列

时间:2015-04-09 15:09:40

标签: wpf datatemplate

我在资源中写了两个UserControl的{​​{1}}:

DataTemplate 1

DataTemplates

DataTemplate2

 <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> 

使用 <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。一切都很好。

但正如您所看到的,DataTemplate2与DataTemplate1具有相同的两个单元格,另外还有两个单元格。这只是一个小例子。在我的应用程序中,DataTemplate1有大约15列。使用DataTemplate2还有另外10列。

我现在的问题是:我是否有可能从DataTemplate内的其他DataGrid继承(或如此)列并添加其他列?

2 个答案:

答案 0 :(得分:1)

您可以将列添加为资源,并在DataGrid中将它们作为资源引用。确保将它们标记为x:共享为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>

也请参阅此链接WPF DataGrid Columns in Style or resource

答案 1 :(得分:0)

AFAIK在datagrid的列中没有继承可能性,但我建议的是 -

  • 创建一个customGrid控件并将所有常用列添加到其中。
  • 在模板中使用此网格,并添加对该模板有意义的列。

所以你将拥有BaseGrid列1,2,3,4然后你可以使用这个baseGrid并在一个模板中添加5,6列,在另一个模板中添加7,8。 您将得到2个结果网格,一个包含1,2,3,4,5,6列,另一个包含1,2,3,4,7,8

DataGrid.Columns是一个列的集合,您可以随时添加内容。