Я поделюсь домашним хаком, который придумал для своего решения WPF / MVVM.В методах, которые я вызываю для e.Action == NotifyCollectionChangedAction.Remove
или e.Action == NotifyCollectionChangedAction.Add
, я проверяю наличие ошибок и предпринимаю любые действия, необходимые для отмены изменения, и задаю для логического члена _updateObservable
значение true.Поскольку я не могу изменить ObservableCollection во время события изменения, я должен отложить его.Установка логического значения казалась самой простой вещью.
Тогда в модели представления у меня есть свойство, используемое для привязки выбранного элемента к наблюдаемой.Я добавил к этому свойству метод get if (_updateObservable) UpdateObservable();
Похоже, что свойство привязанного выбранного элемента всегда запускает его получатель, даже если добавленный или удаленный элемент не влияет напрямую на выбранный элемент.UpdateObservable () добавляет обратно или удаляет любые элементы, необходимые из коллекции, и устанавливает для флага значение false.