2012-04-09 17 views
1

説明: まず、公開プロパティ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; 
    } 
} 

おかげで、

+0

あなたはMyCollectionViewSource.Source'あまりに '再割り当てすることはできますか?私は 'プロパティ'が変更されていることを確認していない。 – LPL

+0

私の誤解はタイプミスでした。質問を編集しました.SourceプロパティはMyCollectionと等しくなければなりません。 – aidesigner

答えて

関連する問題