WPF datagrid-组头的灵活绑定
我有一个分组行的wpf数据网格,使用WPF datagrid-组头的灵活绑定,wpf,datagrid,collectionviewsource,Wpf,Datagrid,Collectionviewsource,我有一个分组行的wpf数据网格,使用CollectionViewSource实现。组标题模板似乎直接绑定到CollectionViewGroup对象,但由于某些原因,这些模板在CVS中不太容易访问。您给CollectionViewSource组名,它在幕后处理CVG的生成。如果您希望将组标题样式绑定到CVG公开的少数属性之外的其他属性,例如Name和ItemCount,那么这就很困难了 基本上,我希望每个组都有一个Status属性,可能由组标题背景色直观地指示。此状态可以更改,因此标头必须检测属
CollectionViewSource
实现。组标题模板似乎直接绑定到CollectionViewGroup
对象,但由于某些原因,这些模板在CVS中不太容易访问。您给CollectionViewSource
组名,它在幕后处理CVG的生成。如果您希望将组标题样式绑定到CVG公开的少数属性之外的其他属性,例如Name
和ItemCount
,那么这就很困难了
基本上,我希望每个组都有一个
Status
属性,可能由组标题背景色直观地指示。此状态可以更改,因此标头必须检测属性更改
通知。但是由于CollectionViewGroup
没有Status
属性,并且我无法向CollectionViewSource
提供我自己的CVG,我不知道如何完成这个简单的任务。我最终找到了答案。CollectionViewGroup
的Name
属性是一个对象,因此您可以创建所需属性的组视图模型,然后在向CollectionViewSource
添加组描述时将其作为Name
。然后在xaml中,只需对组头控件执行嵌套绑定到Name.which
我是这样设置的(下面是vb.net):
这意味着所有行(更具体地说,行绑定到的viewmodels)将根据名为ProductGroup
的属性进行分组。现在,我将自己的组对象添加到CollectionView
组描述:
Dim pg = New ProductGroupVM(pd.Index)
Me._ProductGroupVMs.Add(pg)
Me.BindedCV.GroupDescriptions(0).GroupNames.Add(pg)
因此,通过将pg
添加到GroupNames
集合中,意味着现在可以在xaml组头样式中引用和绑定到它-它是Name
对象。注意,我还将pg
添加到我创建的第二个名为\u ProductGroupVMs
的私有集合中。这有点老土,但这样我可以保留对所有组对象的引用-当我创建行视图模型时,它们将具有ProductGroup
属性,并且ProductGroup
需要指向右侧pg
,以便对它们进行正确分组。也许有更干净的方法可以做到这一点,但这就是我所走的路线。Tekito,我昨天试图解决这个问题时,有你的一个小例子是个例外。我想我的主要问题是,如何告诉CollectionViewSource使用“Name”对象的哪个属性进行分组?@dansan Ok我添加了一些代码。但是我的CVS
没有按Name
属性进行分组-它通过引用Name
对象本身进行分组。行的绑定对象都有一个名为ProductGroup
的属性,该属性指向它们所属的Name
对象。
Dim pg = New ProductGroupVM(pd.Index)
Me._ProductGroupVMs.Add(pg)
Me.BindedCV.GroupDescriptions(0).GroupNames.Add(pg)