如何继承DataGridColumns

3
我正在编写一个带有两个资源中的DataTemplate的UserControl:
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 列。
现在我的问题是:是否有可能从另一个 DataGrid 中继承(或类似)列,并添加其他列到 DataTemplate 中?

使用相同的列集合,根据某个值切换列的可见性怎么样? - Rachel
2个回答

2
您可以将列作为资源添加并在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>

也可以参考这个链接:WPF DataGrid 列在样式或资源中

涉及IT技术相关内容,请自行理解。

0

据我所知,在数据网格中没有继承列的可能性,但我的建议是--

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接