OnAddEventHandler в ObservableCollection<T> C#

Часто бывает, что супер-навороченных возможностей не хватает, а хочется чего-то земного, простого и неасинхронного в C#. К таким задачам можно отнести необходимость реагировать обработчиком события на добавление нового элемента в ObservableCollection (да, в общем-то, в любую коллекцию).

Уж как там реализовывать сам механизм реакции: синхронно или асинхронно, однопоточно или многопоточно можно решить в обработчике, оставляя максимально чистым реализацию.

Главное, это сам подход. Он заключается в следующем:

  1. Наследование от искомого типа коллекции. Например, от ObservableCollection
  2. Переопределение(сокрытие базового) метода добавления элемента
  3. Обработка вызова события

Пример

using System;
using System.Collections.ObjectModel;

namespace YourAppNamespace {
  public class NotifiableCollection<T> : ObservableCollection<T> {
    internal event EventHandler OnAddEvent;

    public new void Add( T value ) {
      OnAddEvent?.Invoke( this, EventArgs.Empty );
      base.Add( value );
    }
  }
}

Обратите внимание на спецификатор new в описании метода.

Использование

NotifiableCollection<SomeType> data = new NotifiableCollection<SomeType>();
data.OnAddEvent += OnAddEventHandler;

...

private void OnAddEventHandler( object sender, EventArgs e ) {
  DoSomething();
}
Опубликовано 31 мая 2016 г.

Лахтин Станислав Евгеньевич

Ваш комментарий