想知道如何在两个网格之间共享列定义

本文关键字:网格 两个 之间 共享 定义 想知道 | 更新日期: 2023-09-27 18:05:27

我想知道如何在两个网格之间共享列定义,通过将列定义放入样式中?

的原因吗?我想在两个单独的网格之间共享这些列定义。网格大约有20列,所以要在所有的网格中复制和粘贴内容以保持它们的同步需要做很多工作。

下面是一个示例网格:

<dxg:GridControl ItemsSource="{Binding ItemsSource}">
    <dxg:GridControl.Columns>
        <dxg:GridColumn x:Name="Codice" Binding="{Binding Codice}" FieldName="Codice"/>
        <dxg:GridColumn x:Name="Nome" Binding="{Binding Nome}" FieldName="Nome"/>
    </dxg:GridControl.Columns>
</dxg:GridControl>

What I have try

我已经尝试将列定义转换为样式,因此我可以在两个网格之间共享列定义,但是,我一直得到错误Property 'Visual Tree' does not support values of type 'GridColumn'

想知道如何在两个网格之间共享列定义

根据你发布的代码,它看起来(即使你没有提到它),你正在使用DevExpress' GridControl。

如果是,你有ColumnSource属性,你可以绑定到一个对象的列表,表示一个列(不一定是GridColumn对象)。

这个链接比我解释得更好:https://documentation.devexpress.com/#WPF/CustomDocument10121但总结一下:

  1. 您创建一个对象列表(您可以创建的类型),但是如果您愿意,您可以使用GridColumn。如果你正在使用MVVM,这应该是在你的ViewModel上,所以使用GridColumn是不明智的),它存储了创建GridColumn所需的数据,并将其分配给GridControlColumnsSource属性
  2. 你做一个DataTemplate(或几个,如果你需要不同的列类型),模板一个GridColumn基于你的对象中的数据(如果你的对象已经是一个GridColumn,这是一个问题,重新定义它,但这是强制性的)
  3. 你创建一个DataTemplateSelector后代选择(通过覆盖SelectTemplate函数)应用哪个模板(如果你只有一个,你可以只返回那个没有任何其他逻辑),并将其分配给GridControlColumnGeneratorTemplateSelector属性

在上面的链接中都有解释,在这里回答太长了,但希望能让你开始

DevExpress在其演示的MVVM部分中有这样的示例,并且文档相当好。

除了模板选择器,其他都可以在XAML

中完成

所以一旦你有了这个,只是分配相同的"列定义对象"列表到每个GridControlColumnsSource属性的问题,你可以分享它到尽可能多的网格控件,因为你想。

<标题> 更新

我这样做已经很长时间了,但是看着我的旧源代码,如果您只是将GridColumn集合提供给ColumnSource属性,则可能根本不需要使用模板选择器。我记得这是不可能的(尽管那时我测试了很多组件套件,在某些情况下是不可能的),但我看到它在我自己的代码中完成,并且没有看到任何明显的地方我选择了ColumnTemplateSelector

我认为在DataGrid上使用AutoGenerateColumns="True"将是您最好的选择