【问题标题】:Wondering how to share column definitions between two grids?想知道如何在两个网格之间共享列定义?
【发布时间】:2015-07-30 20:21:59
【问题描述】:

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

原因?我想在两个单独的网格之间共享这些列定义。网格有大约 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>

我尝试过的

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

【问题讨论】:

  • 为什么你不用这个 Grid 创建一个 UserControl 并在你不想访问网格的任何地方使用 UserControl?
  • @take 不幸的是,这不起作用,因为一个网格是主/详细网格,另一个网格是主网格。 &lt;dxg:GridControl.Columns&gt; 标签之间的列定义在它们之间是共享的,但网格的其余部分则完全不同。

标签: c# wpf


【解决方案1】:

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

如果是这样,您有ColumnSource 属性,您可以在其中绑定到表示列的对象列表(不一定是GridColumn 对象)。

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

  1. 您创建一个对象列表(您可以创建一个类型,但如果您愿意,可以使用 GridColumn。如果您使用 MVVM,这应该在您的 ViewModel 上,因此使用 GridColumn 是不明智的)其中存储创建GridColumn 并将其分配给GridControl 上的ColumnsSource 属性所需的数据
  2. 您创建一个DataTemplate(或多个,如果您需要不同的列类型),它根据您的对象中的数据模板一个GridColumn(如果您的对象已经是GridColumn,则需要重新定义它,但这是强制性的)
  3. 您创建一个DataTemplateSelector 后代,它选择(通过覆盖SelectTemplate 函数)要应用哪个模板(如果您只有一个,您可以只返回该模板而无需任何其他逻辑)并将其分配给@987654334 @属性上的GridControl

上面的链接已经解释过了,这里的回答会太长,但希望能帮助你开始

DevExpress 在其演示的MVVM 部分中提供了此示例,并且文档相当不错。

除了模板选择器之外,都可以在 XAML 中完成

因此,一旦有了这个,只需将相同的“列定义对象”列表分配给每个GridControl 的ColumnsSource 属性,您就可以将它共享给任意数量的网格控件。

更新

我已经很久没有这样做了,但是看看我的旧资源,如果你只是将一个 GridColumn 集合提供给 ColumnSource 属性,你可能不需要使用模板选择器全部。我记得这是不可能的(尽管那时我测试了很多组件套件,但在某些组件中是不可能的),但是我看到它是在我自己的代码中完成的,并且在我选择 @987654341 的地方看不到任何明显的地方@

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-04
      • 2013-06-10
      • 2019-09-19
      • 1970-01-01
      相关资源
      最近更新 更多