2010-11-25 15 views
3

とにSortedSet私はこのようなものがあります:私は何かがCPeopleに変更された場合CMainに知りたいINotifyPropertyChangedの

public class CPerson: INotifyPropertyChanged 
public class CPeople: SortedSet<CPerson> 
public class CMain 
{ 
    private CPeople _people; 
} 

を、新しい人が追加または削除されたか何かがCPeopleにいくつかのCPersonに変更した、私が持っていますCPersonINotifyPropertyChangedを実装しましたが、どのインタフェースがCPeopleクラスに実装されているか、どのようにしてPropertyChangedイベントをCPeopleからCMainに出力するかは、素晴らしいアイデアはありません。

誰でも手伝ってもらえますか? ご挨拶。

答えて

6

私はObservableCollection<Person>を使用します。 SortedSetが本当に必要な場合は、INotifyCollectionChangedインターフェイスとINotifyPropertyChangedインターフェイスを実装することもできます。あなたが前に進むことができ

一つの方法はそうのように、巻き付けたSortedSetあなたのコレクションクラスを作成することができます

public class ObservableSortedSet<T> : ICollection<T>, 
             INotifyCollectionChanged, 
             INotifyPropertyChanged 
{ 
    readonly SortedSet<T> _innerCollection = new SortedSet<T>(); 

    public IEnumerator<T> GetEnumerator() 
    { 
     return _innerCollection.GetEnumerator(); 
    } 

    IEnumerator IEnumerable.GetEnumerator() 
    { 
     return GetEnumerator(); 
    } 

    public void Add(T item) 
    { 
     _innerCollection.Add(item); 
     // TODO, notify collection change 
    } 

    public void Clear() 
    { 
     _innerCollection.Clear(); 
     // TODO, notify collection change 
    } 

    public bool Contains(T item) 
    { 
     return _innerCollection.Contains(item); 
    } 

    public void CopyTo(T[] array, int arrayIndex) 
    { 
     _innerCollection.CopyTo(array, arrayIndex); 
    } 

    public bool Remove(T item) 
    { 
     _innerCollection.Remove(item); 
     // TODO, notify collection change 
    } 

    public int Count 
    { 
     get { return _innerCollection.Count; } 
    } 

    public bool IsReadOnly 
    { 
     get { return ((ICollection<T>)_innerCollection).IsReadOnly; } 
    } 

    // TODO: possibly add some specific methods, if needed 

    public event NotifyCollectionChangedEventHandler CollectionChanged; 
    public event PropertyChangedEventHandler PropertyChanged; 
} 
+0

感謝;-)良いアイデア;-) – Svisstack

0

あなたのコレクションに追加された項目、およびバブルからのプロパティ変更イベントにあなたのコレクションを購読するためにあなたのコレクション内のaddメソッドを使用し、PersonAdded(Person p)PersonRemoved(Person p)、およびPersonPropertyChanged(Person p,PropertyChangedEventArgs arg)のようなもののようなイベントで、IPeopleChangedなどを独自のインターフェースを作成します。 CMainであなたのコレクションのイベントを購読してください。

あなたのコレクションには、アイテムが追加されたときに1つ、アイテムが削除されたときに1つ、アイテムが変更されたときにチェーンに沿ってPropertyChangedイベントを渡す1つのイベントがあります。

1

SortedSet <>を使用する必要がある場合は、INotifyCollectionChangedを実装する子孫クラス(SortedSet <>から)を作成することができます。または、SortedSet <に接続していない場合は、代わりにObservableCollection <>を使用してください。

関連する問題