c# - 防止在 ObservableCollection.CollectionChanged 事件上添加新项目

标签 c# .net observablecollection

我需要检查一些条件,然后决定是否将新项目添加到我的收藏中,我是否可以阻止添加到我的 CollectionChanged 事件中,或者现在是否为时已晚?实际上我可以修改新项目,但由于运行时异常无法将其从 NewItems 集合中删除:

    protected void MyFilter(object sender, NotifyCollectionChangedEventArgs e)
    {                   
         f (e.Action == NotifyCollectionChangedAction.Add)
         {
             foreach (Item item in e.NewItems)
             {
                 if (!Item.CanBeAdded())
                 {
                      //Prevent adding the Item !
                 }
             }             
        }
    }

最佳答案

问题是它已经添加到集合中了。如果我遵循此操作,唯一的方法就是将其从集合中删除。但这会重新触发您创建的 MyyFilter 订阅。

如果此集合绑定(bind)在网格上或您可以从 UI 创建项目的任何地方,那么我建议您创建一个自定义的可观察集合。

基本代码是这样的。

public class MyObservableCollection<T> : ICollection<T>
, INotifyCollectionChanged
, INotifyPropertyChanged
{
}

在 ICollection 的 Add 方法上实现您的验证逻辑。

如果您愿意,请继续复制此 guys实现。

关于c# - 防止在 ObservableCollection.CollectionChanged 事件上添加新项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26794217/

相关文章:

c# - System.ArgumentException 值不在预期范围内,SQL 问题

c# - 移动对象并比较 ArrayList 中的相同 Vector3

c# - 如何使用 ngen.exe 编译以及如何运行生成的 native 代码?

c# - 如何测试 Type 是否派生自抽象基泛型类型?

mvvm - Observable Collection 在 MVVM 中的属性更改时通知

WPF ListBox 未绑定(bind)到 INotifyCollectionChanged 或 INotifyPropertyChanged 事件

c# - Windows IoT Raspberry Pi 3 C#从列表框中选择并播放音频

C# 泛型 - 类型参数的约束

.net - 从嵌入的 YouTube 视频中删除品牌和标题链接

c# - Caliburn.Micro - 将 ValueTuple 的 ObservableCollection 绑定(bind)到 ComboBox