1

説明:最初に、パブリックプロパティMyCollectionを介してアクセスされるObservableCollectionを作成しました。これで、DataGrid UIをMyCollectionにバインドすると、コレクションの変更は認識されますが、MyCollection自体が変更された場合(つまり、UpdateCollectionメソッド)は認識されません。この問題を解決するために、おなじみの'PropertyChanged( "MyCollection")'をMyCollectionプロパティに適用しました。

ここで、コレクションビューレイヤーを必要とするDataGridコンテンツをグループ化する必要があることがわかりました。CollectionViewを追加してバインドすると、MyCollectionが再割り当てされたときにUIが更新されなくなりました。CollectionChangedのみがソースからビューに伝播することを読みました。私の場合、ソースまたはビューでCollectionChangedイベントをトリガーする必要があるのはMyCollectionのPropertyChangeだと思います。

質問: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;
  }
}

ありがとう、

4

1 に答える 1

0

Active Grouping Collection をご覧ください。これは別の問題を対象としていますが、あなたの問題を解決する可能性があります。

よりスマートな WPF CollectionView の構築

CodePlex のアクティブ コレクション ビュー

于 2012-04-09T23:55:53.770 に答える