我有几个WPF窗口,除了DataGrid上的列(DataContext是不同对象的ObservableCollections),一些标签中的文本和一个Button点击处理程序之外,它们非常相似。
对于每个窗口,DataGrid的<DataGrid.Columns>
部分是不同的。它使用AutoGenerateColumns="False"
并显示不同对象的不同列。
我想知道是否可以继承基础WPF窗口,这样我就可以在每个子类的XAML上编写<DataGrid.Columns>
部分,而不是在代码中编写它。
还有什么其他技术可以在使用XAML的同时遵守WPF上的DRY原则?
答案 0 :(得分:0)
我会用一个窗口和不同的DataTemplates来做。但是,如果要使用继承,则可以使用基本窗口引用的键覆盖Window.Resources中的DataTemplate
。 DataTemplate
将拥有整个数据网格的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
这可能是更大的公共视图模板的一部分 - 无需创建单独的视图类。