我有这样的事情:

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


我想在CMain中知道是否在CPeople中进行了更改,添加或删除了新人员,或者在CPerson中的某些CPeople中进行了更改,我已经在INotifyPropertyChanged上实现了CPerson,但是我没有没有什么绝妙的主意,CPeople类上实现了什么接口,以及如何以良好的方式将PropertyChanged事件从CPeople传递到CMain

谁能帮我?
问候。

最佳答案

我会使用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;
}

10-04 14:31