DRY - 子类化WPF窗口

时间:2014-05-28 15:50:40

标签: wpf dry subclassing

我有几个WPF窗口,除了DataGrid上的列(DataContext是不同对象的ObservableCollections),一些标签中的文本和一个Button点击处理程序之外,它们非常相似。

对于每个窗口,DataGrid的<DataGrid.Columns>部分是不同的。它使用AutoGenerateColumns="False"并显示不同对象的不同列。

我想知道是否可以继承基础WPF窗口,这样我就可以在每个子类的XAML上编写<DataGrid.Columns>部分,而不是在代码中编写它。

还有什么其他技术可以在使用XAML的同时遵守WPF上的DRY原则?

2 个答案:

答案 0 :(得分:0)

我会用一个窗口和不同的DataTemplates来做。但是,如果要使用继承,则可以使用基本窗口引用的键覆盖Window.Resources中的DataTemplateDataTemplate将拥有整个数据网格的Xaml。

答案 1 :(得分:0)

  

如何从数据源填充DataGrid列...

是的,你在这里遇到了限制。 Columns属性不可绑定;实际上它甚至不可设置,你只能在集合中添加和删除。这个问题有一个解决方法:How do I bind a WPF DataGrid to a variable number of columns?

理论上,您可以将列添加到<Application.Resources>,然后像上面的问题那样对附加属性进行数据绑定,并编写一个值转换器,根据数据源值构建列集合,从{{1 }}。但这似乎比它需要的更复杂。

我认为您可以使用样式触发器将一些Application.Current.Resources替换为不同的DataGrids:

Content

这可能是更大的公共视图模板的一部分 - 无需创建单独的视图类。