Я надеюсь, что смогу отклонить некоторые элементы после того, как они будут добавлены в ObservableCollection. Я не могу создать подкласс ObservableCollection или использовать какое-либо представление, поэтому я, похоже, ограничен использованием одного определенного обработчика событий (CollectionChanged) для выполнения .Remove() для запрещенных элементов. Это нормально, если элементы существуют в течение короткого периода времени между вызовом события и его последующей обработкой; элементы должны просто не сохраняться в коллекции. Вызов .Remove() в обработчике события CollectionChanged не разрешен. Во время выполнения .NET генерирует исключение InvalidOperationException:
«Невозможно изменить ObservableCollection во время события CollectionChanged».
Лично я думаю, что .NET должен позволить мне это. Если я создам бесконечный цикл, это моя чертова вина.
Код, который я хотел бы использовать, будет выглядеть так:
myCollection.CollectionChanged += (sender, args) =>
{
if (args.Action == NotifyCollectionChangedAction.Remove)
return;
foreach (var itm in myCollection)
{
if (itm.name == "Fred")
myCollection.Remove(itm);
}
}
Я не уверен, какие у меня есть варианты. Использование диспетчера, похоже, не работает. Запуск другого события и размещение вызова .Remove в другом обработчике — единственный другой вариант, который приходит на ум.