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

时间:2015-07-30 10:29:03

标签: c# wpf

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

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

2 个答案:

答案 0 :(得分:3)

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

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

此链接比我更好地解释了它:https://documentation.devexpress.com/#WPF/CustomDocument10121但总结一下:

  1. 您创建一个对象列表(您可以创建的类型,但如果您愿意,可以使用GridColumn。如果您使用MVVM,则应该在ViewModel上,因此使用GridColumn不是明智的)存储创建GridColumn所需的数据并将其分配给ColumnsSource上的GridControl属性
  2. 您制作了DataTemplate(如果您需要不同的列类型,则为几个),根据您对象中的数据模板GridColumn(如果您的对象已经是GridColumn它是再次定义它的问题,但这是强制性的)
  3. 你创建了一个DataTemplateSelector后代,它选择(通过覆盖SelectTemplate函数)要应用哪个模板(如果你只有一个,你可以在没有任何其他逻辑的情况下返回那个模板)并分配它到ColumnGeneratorTemplateSelector
  4. 上的GridControl属性

    这一切都在上面的链接中解释过,并且会在这里做出太长的答案,但希望能让你开始

    DevExpress在其演示的MVVM部分有样本,文档相当不错。

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

    所以,一旦你有这个,只需要为每个GridControl的{​​{1}}属性分配相同的“列定义对象”列表,你可以将它分享给尽可能多的网格控件你想要的。

    更新

    自从我这么做以来已经有很长一段时间,但是看着我的旧资料,如果您只是将ColumnsSource集合提供给GridColumn属性,则可能不需要使用一个模板选择器。我记得这是不可能的(虽然到那时我测试了很多组件套件并且在一些组件套件中是不可能的),但我看到它在我自己的代码中完成,并且在我选择{{{ 1}}

答案 1 :(得分:0)

我认为在library("grid") library("ggplot2") df <- data.frame(x=c(1:10,1:10),y=c(1:10,1001:1010),condition=rep(c("A","B"),each=10)) g <- rectGrob(gp=gpar(fill="black")) p <- ggplot(df, aes(x=x,y=y)) + geom_line() + facet_wrap(~ condition, scales="free_y") p + geom_rect(xmin=3,xmax=7,ymin=0.56,ymax=1,colour="black", fill="black") g <- rectGrob(gp=gpar(fill="black")) p + annotation_custom(g, xmin=3, xmax=7, ymin=0, ymax=1 ) p + annotation_custom(g, xmin=unit(3, "native"), xmax=unit(7,"native"),ymin=unit(0,"npc"),ymax=unit(1,"npc") ) 上使用AutoGenerateColumns="True"将是您的最佳选择