Часто бывает, что супер-навороченных возможностей не хватает, а хочется чего-то земного, простого и неасинхронного в C#. К таким задачам можно отнести необходимость реагировать обработчиком события на добавление нового элемента в ObservableCollection
(да, в общем-то, в любую коллекцию).
Уж как там реализовывать сам механизм реакции: синхронно или асинхронно, однопоточно или многопоточно можно решить в обработчике, оставляя максимально чистым реализацию.
Главное, это сам подход. Он заключается в следующем:
Пример
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();
}