首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何继承DataGridColumns

如何继承DataGridColumns
EN

Stack Overflow用户
提问于 2015-04-09 15:09:40
回答 2查看 651关注 0票数 3

我正在编写一个UserControl,其中包含两个DataTemplates

DataTemplate 1

代码语言:javascript
运行
复制
 <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

代码语言:javascript
运行
复制
 <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中的列并添加其他列?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-09 15:28:56

您可以将列添加为资源,并将它们作为资源在DataGrid中引用。确保您应该将它们标记为x:Shared为false,以避免冲突。请参阅下面的代码。

代码语言:javascript
运行
复制
 <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

票数 2
EN

Stack Overflow用户

发布于 2015-04-09 15:19:22

AFAIK在数据栏中没有继承的可能性,但我的建议是--

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

因此,您将拥有列1、2、3、4的BaseGrid,然后您可以使用这个baseGrid并在一个模板中添加列5,6,在另一个模板中添加7,8列。将产生两个网格,一个列为1,2,3,4,5,6,另一列为1,2,3,4,7,8

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29542303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档