Вы должны иметь возможность подписаться на CollectionChanged с небольшим количеством размышлений:
void AddCollectionChangedHandler(ICollection collection, NotifyCollectionChangedEventHandler handler)
{
Type type = collection.GetType();
if(type.IsGenericType
&& type.GetGenericTypeDefinition() == typeof(ObservableCollection<>))
{
EventInfo collectionChanged = type.GetEvent("CollectionChanged");
collectionChanged.AddEventHandler(collection, handler);
}
}
Он использует одну «волшебную строку», но подписывает данный обработчик на событие.