PropertyChangedEventManager是什么时候创建的,什么时候附加的



长话短说,这是一个大型WPF项目

我有一个实现INotifyPropertyChanged的类"Patient"。当我处理这个类时,我检查PropertyChangedEventHandler是否为空,如果不将其运行到记录侦听器的ListenerDetector类,以便我们可以跟踪它们并清除泄漏。Patient确实有一些属性绑定到WPF元素以及其他对象,使用它的PropertyChanged来监视变化。

处理完其他内容后,日志结果如下:

日志:患者仍然有以下侦听器附加:- System.ComponentModel.PropertyChangedEventManager

问题:什么时候创建PropertyChangedEventManager ?

  • 当患者被创建时
  • 当WPF绑定到Patient属性时
  • 另一个观点。

如果Patient.PropertyChangedEventHandler被设置为null,因此与PropertyChangedEventManager断开连接,是否有任何方法可以重新创建管理器并使其再次侦听Patient.PropertyChangedEventHandler ?请不要问为什么会发生这种情况,这是这里的一个紧张点:

PropertyChangedEventManager是WPF为了支持绑定到任何实现INotifyPropertyChanged的类而创建的。当您绑定到任何实现INotifyPropertyChanged类时,它将被创建和使用。

也就是说,它是WeakEventManager模式的一个实现。虽然它仍然显示了一个附加的侦听器,但要注意这个侦听器是使用弱事件模式附加的。一旦发生完整的垃圾收集,这个问题就会消失,因为它使用弱引用来保存订阅。因此,这个特定的订阅不应该是(长期)内存泄漏的原因。

相关内容

  • 没有找到相关文章

最新更新