Продолжим тему.
Значит,
решил я воспользоваться советом Антонария и вынести делегат в отдельное поле. Это мне нужно было в т. ч. и для того, чтобы воспользоваться сериализацией.
Делаю так.
Класс Quest помечен атрибутом Serializable и в нём есть поля
protected ObservableCollection<Quest> _children;
protected NotifyCollectionChangedEventHandler _children_CollectionChanged;
В конструторе класса делаю так
_children_CollectionChanged = Children_CollectionChanged;
_children = new ObservableCollection<Quest>();
_children.CollectionChanged += _children_CollectionChanged;
Затем сериализую и десериализую
Quest quest = quest.DeepClone();
Всё, что делает DeepClone(), это
public static T DeepClone<T>(this T obj)
{
using (MemoryStream ms = new MemoryStream())
{
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(ms, obj);
ms.Position = 0;
return (T)bf.Deserialize(ms);
}
}
Затем добавляю в коллецию потомков объекта quest один объект
model.Children.Add(new Quest());
И метод Children_CollectionChanged НЕ ВЫЗЫВАЕТСЯ. Почему? Я же его сериализовал.