説明: まず、公開プロパティMyCollectionを介してアクセスされるObservableCollectionを作成しました。今度は私のDataGrid UIをMyCollectionにバインドすると、コレクションの変更を認識しますが、MyCollection自体が変更された場合(つまりUpdateCollectionメソッド)は認識されません。この問題を解決するために、使い慣れた 'PropertyChanged( "MyCollection")'をMyCollectionプロパティに適用しました。UI再割り当てされるObservableCollectionへの更新のバインド
これで、コレクションビューレイヤが必要なDataGridコンテンツをグループ化する必要があることがわかりました。 CollectionViewを追加してバインドすると、MyCollectionが再割り当てされたときにUIが更新されなくなりました。 CollectionChangedだけがソースからビューに伝播することを読んでいます。私のケースでは、ソースまたはビューでCollectionChangedイベントを何とか起動する必要があるMyCollectionのPropertyChangeです。
質問: はどのようMyCollectionのビューにバインドされたUIの更新をトリガするためにMyCollectionに再assigmendを得ることができますか?
注:MyCollectionを再割り当てする理由は、Modular 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;
}
}
おかげで、
あなたはMyCollectionViewSource.Source'あまりに '再割り当てすることはできますか?私は 'プロパティ'が変更されていることを確認していない。 – LPL
私の誤解はタイプミスでした。質問を編集しました.SourceプロパティはMyCollectionと等しくなければなりません。 – aidesigner