UI绑定更新到重新分配的ObservableCollection

时间:2012-04-09 22:17:36

标签: wpf binding observablecollection

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

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

问题: 如何在MyCollection上重新指定触发UI更新,该更新绑定到MyCollection视图?

注意:重新分配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;
  }
}

谢谢,

1 个答案:

答案 0 :(得分:0)

看看Active Grouping Collection,它针对的是另一个问题,但可以解决你的问题。

Building a smarter WPF CollectionView

Active Collection View on CodePlex