2015-11-20 26 views
1

我是相当新的WPF,我想监听属性的更改将继续被垃圾回收我的自定义控件...PropertyChangedEventHandler是否让我的自定义控件不被垃圾收集?

从本质上讲,我听这样的活动:

obj.PropertyChanged += this.The_PropertyChanged; 

我害怕我执行代码的控制不能被垃圾收集,而obj仍然存在,因为obj.PropertyChanged持有对this的引用。它是否正确?如果是这样,避免这种情况的正确方法是什么?如果我正确地告知,没有Dispose()方法可能被重写时,控制从屏幕上消失被调用,所以没有明显的位置,除去从obj.PropertyChangedthis.The_PropertyChanged ...

+0

首先,你确定你需要这个吗?通常,PropertyChanged事件是通过绑定对象订阅的,而不是由您的代码订阅的。 –

回答

0

是的,你是正确的。 obj将提及“this”,因此“this”不会被垃圾收集。解决方法是:

obj.PropertyChanged -= this.The_PropertyChanged; 

并且您将该代码放置在“this”已关闭,已处置或明智不再需要的地方。

因此,对于控制,如果承载控件的窗口关闭,可能是您放置代码的位置。

+0

谢谢:)但是,将责任放在谁在代码中使用控件的人必须有更好的方法,但是呢?控件应该在添加窗口事件时收听窗口事件吗? – mutex

+0

控件不听这些事件。事件发生时通知控制。 + =只是将事件处理函数添加到事件触发时要调用的函数列表中。尝试为单个事件多次添加相同的事件处理程序。你会注意到,每次添加处理程序时,处理程序都会被调用一次。认为它更像是处理程序是订阅者,事件是发布者。就像在现实世界里,如果你不再想让时代杂志邮寄给你,你必须告诉他们停止发送它。 –