我希望答案就像问题一样简单,但我需要为实现SortedList的类编写一个事件。
有没有办法可以随时更改此列表(添加,修改,删除)来创建事件处理程序? Add()方法等不能覆盖。
谢谢!
答案 0 :(得分:2)
不,没有。获得此类行为的最佳方法是创建一个包装SortedList<T>
的新类,公开一组类似的方法,并为您关注的方法提供相应的事件。
public class MySortedList<T> : IList<T> {
private SortedList<T> _list = new SortedList<T>();
public event EventHandler Added;
public void Add(T value) {
_list.Add(value);
if ( null != Added ) {
Added(this, EventArgs.Empty);
}
}
// IList<T> implementation omitted
}
答案 1 :(得分:1)
您应该封装它,而不是从SortedList继承。除了INotifyCollectionChanged:
之外,使您的类实现相同的接口public class MySortedList<TKey, TValue> : IDictionary<TKey, TValue>,
ICollection<KeyValuePair<TKey, TValue>>, IEnumerable<KeyValuePair<TKey, TValue>>,
IDictionary, ICollection, IEnumerable, INotifyCollectionChanged
{
private SortedList<TKey, TValue> internalList = new SortedList<TKey, TValue>();
public void Add(TKey key, TValue value)
{
this.internalList.Add(key,value);
// Do your change tracking
}
// ... implement other methods, just passing to internalList, plus adding your logic
}