c# - 取消订阅 observableCollection 中的事件

标签 c#

假设我有一个 observableCollection 类:

CustomClassName testClass = new CustomClassName();
ObservableCollection<CustomClassName> collection = new ObservableCollection<CustomClassName>();
testClass.SomeEvent += OnSomeEvent;
collection.add(testClass);

当我要从集合中删除项目时,我需要手动取消订阅事件 (OnSomeEvent) 还是应该留给 GC? 退订的最佳方式是什么?

最佳答案

如果您希望收集您的元素,那么是的,您需要取消订阅。

通常的做法是:

collection.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(collection_CollectionChanged);

// ...
// and add the method
void collection_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
    if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Remove)
    {
        foreach (var it in e.OldItems) {
            var custclass = it as CustomClassName;
            if (custclass != null) custclass.SomeEvent -= OnSomeEvent;
        }
    }
}

关于c# - 取消订阅 observableCollection 中的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31980625/

相关文章:

c# - 在 WCF 中使用 ConcurrencyMode.Multiple 的优点和缺点

c# - 单个类中的文件 Create() 和 WriteAllText() 抛出异常,

c#泛型基类方法返回派生类的类型

c# - Visual Studio 2012 中的 SOAP 服务

c# - 获取 selenium 下拉框中当前选定的选项

c# - 如何处理 UWP NavigationView 中设置按钮的点击事件?

c# - installutil 成功完成但未安装服务

c# - RichTextBox - UI 调整大小导致巨大的 CPU 负载

javascript - Ajax 未将数组传递给 Controller ​​操作?

c# - 传递一个类/结构与传递多个参数