1

描述:首先我创建了一个 ObservableCollection,它可以通过公共属性 MyCollection 访问。现在,如果我将 DataGrid UI 绑定到 MyCollection,它将识别集合更改,但如果 MyCollection 本身发生更改(即 UpdateCollection 方法)则不会。为了解决这个问题,我将熟悉的 'PropertyChanged("MyCollection")' 应用于 MyCollection 属性。

现在我发现需要对需要集合视图层的 DataGrid 内容进行分组。当我添加并绑定到 CollectionView 时,当 MyCollection 被重新分配时 UI 不再更新。我读到只有 CollectionChanged 从源传播到视图。我想在我的情况下,MyCollection 上的 PropertyChange 需要以某种方式触发 Source 或 View 上的 CollectionChanged 事件。

问题:如何重新分配 MyCollection 以触发绑定到 MyCollection 视图的 UI 更新?

注意:重新分配 MyCollection 的原因是模块化 MEF/MVVM 架构。

public class MyViewModel
{
  public MyViewModel()
  {
    MyCollectionViewSource = new CollectionViewSource() { Source = MyCollection};
    // The DataGrid is bound to this ICollectionView
    MyCollectionView = MyCollectionViewSource.View;
  }

  // Collection Property
  // NotifyPropertyChanged added specifically to notify of MyCollection re-assignment
  ObservableCollection<MyObject> _MyCollection;
  public ObservableCollection<MyObject> MyCollection
  {
    get {return _MyCollection;}
    set {if (value != _MyCollection)
            {_MyCollection = value;
            NotifyPropertyChanged("MyCollection");}}
  }

  public MyCollectionViewSource PropertiesCollectionViewSource { get; private set; }
  public ICollectionView = MyCollectionView { get; private set; }

  // Method updates MyCollection itself (Called via ICommand from another ViewModel)
  public void UpdateCollection(ObservableCollection<MyObject> NewCollection)
  {
    MyCollection = NewCollection;
  }
}

谢谢,

4

1 回答 1

0

看看 Active Grouping Collection,它针对的是不同的问题,但可能会解决你的问题。

构建更智能的 WPF CollectionView

CodePlex 上的活动集合视图

于 2012-04-09T23:55:53.770 回答