Я надеюсь, что смогу отклонить некоторые элементы после их добавления в коллекцию 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 в другой обработчик - единственная другая опция, которая приходит на ум.