0

我有一个带有分组行的 wpf 数据网格,使用CollectionViewSource. 看起来组头模板直接绑定到CollectionViewGroup对象,但由于某种原因,这些在 CVS 中不是很容易访问。您给CollectionViewSource组名,它会在幕后处理生成 CVG。如果您希望组标题样式绑定到 CVG 所公开的少数属性(例如NameItemCount.

基本上,我希望每个组都有一个Status属性,可能由组标题背景颜色在视觉上指示。这Status可能会改变,因此标题必须以某种方式检测propertychanged通知。但是由于CollectionViewGroup没有Status属性,并且我无法将自己的 CVG 提供给CollectionViewSource,所以我不知道如何完成这个简单的任务。

4

1 回答 1

2

我最终想通了。的Name属性CollectionViewGroup是一个对象,因此您可以创建所需属性的组视图模型,然后Name在将组描述添加到CollectionViewSource. 然后在 xaml 中只Name.whatever对组头控件进行嵌套绑定。

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

  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)

因此,通过添加pgGroupNames集合意味着它现在可以在 xaml 组标题样式中被引用和绑定 - 它是Name对象。请注意,我还添加pg到我创建的第二个私有集合中,称为_ProductGroupVMs. 这有点骇人听闻,但这样我可以保留对所有组对象的引用 - 当我创建行视图模型时,它们将具有一个ProductGroup属性,并且ProductGroup需要指向右侧pg才能正确分组。可能有更清洁的方法来做到这一点,但这就是我走的路。

于 2013-07-30T21:05:54.593 回答