我有这样的事情:
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;
}