2017-01-18 13 views
1

は私のような編成されたデータ構造を有しています。カスケードIPropertyChanged

エイリアス/シンボル/グラフィック内で何か変更が発生した場合はいつでも、Graphicクラス内の関数を実行できるようにします。私がこれを行うために見ることができる最もよい方法は、3つのクラスのそれぞれにIPropertyChangedを実装することです。しかし、正確に何が変更されたかについてGraphicへの参照を取得している間にこれらをカスケードすることは可能ですか?

注:変更は一般にAlias内のプロパティになりますが、Symbolを削除/追加または名前変更できる可能性もあります。

答えて

2

あなたがINotifyCollectionChangedINotifyPropertyChanged

基本的に、あなたはこのようなものを使用した派生クラスを作成し、いくつかの方法

public class Data 
    { 
     public ObservableCollection<String> InnerCollection { get; set; } 
    } 

    public class collection : ObservableCollection<Data> 
    { 
     protected override void InsertItem(int index, Data item) 
     { 
      item.InnerCollection.CollectionChanged += InnerCollection_CollectionChanged; 
      base.InsertItem(index, item); 
     } 

     private void InnerCollection_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) 
     { 
      //Actually it does not make any sense. You may need to construct something special. But firing an event it would be enough 
      OnCollectionChanged(e); 
     } 

     protected override void RemoveItem(int index) 
     { 
      var date = base.Items[index]; 
      date.InnerCollection.CollectionChanged -= InnerCollection_CollectionChanged; 
      base.RemoveItem(index); 
     } 
    } 

をオーバーライドする必要がある、あなたが巣あなたのイベントが深いことができますを実装するクラスObservableCollection<T>を活用することができますあなたが望むように。

+0

乾杯!それがまさに私が必要なものです。 –

+1

BindingList を使用して、それを行う組み込みコレクションに使用することもできます。 –