WPF datagrid - 组头的灵活绑定

时间:2013-07-25 21:53:34

标签: wpf datagrid collectionviewsource

我有一个带有分组行的wpf数据网格,使用CollectionViewSource实现。组头标题模板似乎直接绑定到CollectionViewGroup对象,但由于某些原因,这些在CVS中不是很容易访问。您给出CollectionViewSource组名称,它处理后台生成CVG。如果您希望组标题样式绑定到CVG公开的少数属性之外的其他内容(例如NameItemCount),这会使事情变得困难。

基本上,我希望每个组都有一个Status属性,可能是由组头背景颜色直观地指示。此Status可能会发生变化,因此标题必须以某种方式检测propertychanged次通知。但由于CollectionViewGroup没有Status属性,而我无法向CollectionViewSource提供自己的CVG,因此我不知道如何执行此简单任务。

1 个答案:

答案 0 :(得分:1)

我最终想通了。 Name的{​​{1}}属性是一个对象,因此您可以创建所需属性的组视图模型,然后在向CollectionViewGroup添加组说明时将其作为Name。 。然后在xaml中为组标题控件执行嵌套绑定CollectionViewSource

我这样设置(vb.net跟随):

Name.whatever

这意味着所有行(更具体地说,行绑定到的视图模型)将根据名为 Me.BindedCV = New Data.CollectionViewSource Me.BindedCV.GroupDescriptions.Add(New Data.PropertyGroupDescription("ProductGroup")) 的属性进行分组。现在我将自己的组对象添加到ProductGroup组描述中:

CollectionView

因此,将 Dim pg = New ProductGroupVM(pd.Index) Me._ProductGroupVMs.Add(pg) Me.BindedCV.GroupDescriptions(0).GroupNames.Add(pg) 添加到pg集合意味着现在可以在xaml组标题样式中引用和绑定它 - 它是GroupNames对象。请注意,我还将Name添加到我创建的名为pg的第二个私有集合中。这有点hackish,但这样我可以保持对所有组对象的引用 - 当我创建行视图模型时,它们将具有_ProductGroupVMs属性,并且ProductGroup需要指向右侧ProductGroup,以便正确分组。可能有更简洁的方法可以做到,但这就是我走的路。