0

问题是,在我的视图中,我正在订阅 CollectionChanged 事件,如下所示:

初始化组件();CollectionChanged += SomeMethod

每当 DataTemplate 重绘视图时,它总是将 SomeMethod 链接到 CollectionChanged。而且我认为由于引用旧视图没有得到 GC'd。我怀疑这可能是我漏水的原因。我需要将 SomeMethod 注册到 CollectionChanged,所以问题是.. 我怎样才能清除 CollectionChanged。UserControl 是否有清除所有事件订阅的方法?谢谢。

4

1 回答 1

1

假设您有以下内容:

    public Form1()
    {
        InitializeComponent();
        collection.CollectionChanged += new NotifyCollectionChangedEventHandler(collection_CollectionChanged);
    }

并且假设收集的寿命比这个表单长,那么上面的事件处理程序将阻止表单被垃圾收集。假设您每次显示时都在创建一个新表单,您可以在表单的 FormClosed 事件中取消订阅,如下所示:

    public Form1()
    {
        InitializeComponent();
        collection.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(collection_CollectionChanged);
        FormClosed += new FormClosedEventHandler(Form1_FormClosed);
    }

    void Form1_FormClosed(object sender, FormClosedEventArgs e)
    {
        collection.CollectionChanged -= new System.Collections.Specialized.NotifyCollectionChangedEventHandler(collection_CollectionChanged);
    }
于 2012-07-06T02:12:25.360 回答