Реализуйте событие для изменения в SortedList - PullRequest
1 голос
/ 05 октября 2009

Я надеюсь, что ответ так же прост, как и вопрос, но мне нужно написать событие для класса, который реализует SortedList.

Есть ли способ создать обработчик событий для каждого изменения этого списка (Добавить, Изменить, Удалить)? Методы Add () и другие не могут переопределяться.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 05 октября 2009

нет там нет. Лучший способ получить такое поведение - создать новый класс, который упаковывает 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 голос
/ 05 октября 2009

Вместо того, чтобы наследовать от 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...