Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF datagrid-组头的灵活绑定_Wpf_Datagrid_Collectionviewsource - Fatal编程技术网

WPF datagrid-组头的灵活绑定

WPF datagrid-组头的灵活绑定,wpf,datagrid,collectionviewsource,Wpf,Datagrid,Collectionviewsource,我有一个分组行的wpf数据网格,使用CollectionViewSource实现。组标题模板似乎直接绑定到CollectionViewGroup对象,但由于某些原因,这些模板在CVS中不太容易访问。您给CollectionViewSource组名,它在幕后处理CVG的生成。如果您希望将组标题样式绑定到CVG公开的少数属性之外的其他属性,例如Name和ItemCount,那么这就很困难了 基本上,我希望每个组都有一个Status属性,可能由组标题背景色直观地指示。此状态可以更改,因此标头必须检测属

我有一个分组行的wpf数据网格,使用
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)