2012-07-05 58 views
0

的問題是,在我看來,我訂閱了一個CollectionChanged事件,像這樣:)如何重置內置事件爲空,這樣一個視圖,可以配置

的InitializeComponent(; CollectionChanged + = SomeMethod

每當DataTemplate重繪視圖時,它總是會將SomeMethod鏈接到CollectionChanged。 我認爲,由於參考舊視圖不會GC'd。我懷疑這可能是我所遇到的泄漏的原因。 我需要將SomeMethod註冊到CollectionChanged,所以問題是......我如何清除CollectionChanged。 UserControl是否有一種方法來清除所有訂閱事件? 謝謝。

+1

CollectionChanged - =的someMethod? – 2012-07-05 22:17:50

+0

我知道,但我會把它放在哪裏?在構造函數中呢? 所以你說 'CollectionChanged - =的someMethod;'' + CollectionChanged =的someMethod;' – 2012-07-05 22:30:36

回答

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); 
    } 
+0

正是我的想法:) – thmsn 2012-07-06 08:17:44

+0

感謝編輯@tomas - 複製/粘貼 – Michael 2012-07-06 08:30:06

+0

呀感謝的罪惡。在我看到這篇文章之前,我使用了Unload事件。這樣也能工作嗎? – 2012-07-08 20:29:39

相關問題