我希望能够在将某些项目添加到 ObservableCollection 后拒绝它们。我无法对 ObservableCollection 进行子类化或使用任何类型的 View ,因此我似乎仅限于使用定义的一个事件处理程序 (CollectionChanged) 对禁止的项目执行 .Remove()。如果项目在引发事件和处理事件之间的短时间内存在,那很好;这些项目不应该保留在集合中。在 CollectionChanged 事件处理程序中调用 .Remove() 似乎是不允许的。在运行时 .NET 抛出 InvalidOperationException:
"Cannot change ObservableCollection during a CollectionChanged event."
我个人认为 .NET 应该允许我这样做。如果我创建了一个无限循环,那是我自己的错。
我想使用的代码如下所示:
myCollection.CollectionChanged += (sender, args) =>
{
if (args.Action == NotifyCollectionChangedAction.Remove)
return;
foreach (var itm in myCollection)
{
if (itm.name == "Fred")
myCollection.Remove(itm);
}
}
我不确定我有哪些选择。使用调度程序似乎不起作用。触发另一个事件并在另一个处理程序中放置 .Remove 调用是唯一想到的其他选项。
最佳答案
查看 Common Mistakes using Observable Collection .
话虽如此,如果您仍然想走这条路 - 您可以旋转 new Thread
关于c# - 在 CollectionChanged 事件处理程序中从 ObservableCollection 中移除一个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9743420/