c# - 在 CollectionChanged 事件处理程序中从 ObservableCollection 中移除一个项目

标签 c# observablecollection

我希望能够在将某些项目添加到 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/

相关文章:

c# - 为什么 MVC 会在看似没有 Null Reference 的情况下抛出 NullReferenceException?

c# - 需要使用 .Net C# 连接到 Salesforce CRM

wpf - 检查是否是 ObservableCollection,如果是,则显示替代 xaml!

wpf - 如何从 Observable 集合中删除项目

c# - 开放泛型类型的 ObservableCollection

xamarin - 如何从xamarin中的另一页更新一页的ObservableCollection <>

c# - 使用 VsConnection WorkItemTrackingHttpClient 补丁通过 VSTS 客户端 API 添加父关系

c# - 从 httpContext 获取 ASP.NET 表单字段的值时出现问题

c# - 如何在 C# 控制台应用程序中计算正确?

c# - 在 mvvm light 中获取已排序的可观察集合