我有一个带有分组行的wpf数据网格,使用CollectionViewSource
实现。组头标题模板似乎直接绑定到CollectionViewGroup
对象,但由于某些原因,这些在CVS中不是很容易访问。您给出CollectionViewSource
组名称,它处理后台生成CVG。如果您希望组标题样式绑定到CVG公开的少数属性之外的其他内容(例如Name
和ItemCount
),这会使事情变得困难。
基本上,我希望每个组都有一个Status
属性,可能是由组头背景颜色直观地指示。此Status
可能会发生变化,因此标题必须以某种方式检测propertychanged
次通知。但由于CollectionViewGroup
没有Status
属性,而我无法向CollectionViewSource
提供自己的CVG,因此我不知道如何执行此简单任务。
答案 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
,以便正确分组。可能有更简洁的方法可以做到,但这就是我走的路。