PropertyChangedEventManager何时创建,何时附加?

时间:2011-10-25 18:48:28

标签: .net wpf memory-leaks inotifypropertychanged

简而言之......这是一个大型的WPF项目

我有一个实施INotifyPropertyChanged的“患者”课程。当我处理这个类时,我正在检查PropertyChangedEventHandler是否为null,如果没有,则将其运行到记录侦听器的ListenerDetector类,以便我们可以跟踪它们并清理泄漏。患者确实有一些绑定到WPF元素的属性以及使用其PropertyChanged来监视更改的其他对象。

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

  

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

问题:  PropertyChangedEventManager何时创建?

  • 创建患者时
  • 当WPF绑定到患者属性时
  • 其他一点。

如果Patient.PropertyChangedEventHandler设置为null,因此与PropertyChangedEventManager断开连接,是否有办法重新创建管理器并让它再次收听Patient.PropertyChangedEventHandler?请不要问为什么会发生这种情况,这是一个紧张的地方:-(

1 个答案:

答案 0 :(得分:7)

PropertyChangedEventManager由WPF创建,以支持绑定到任何实现INotifyPropertyChanged的类。只要您绑定到实现INotifyPropertyChanged任何类,就会创建并使用它。

话虽如此,它是WeakEventManager模式的实现。虽然它仍然显示附加的侦听器,但要意识到此侦听器是使用Weak Event Pattern附加的。一旦发生完整的垃圾收集,这将会消失,因为它使用弱引用来保存订阅。因此,此特定订阅不应成为(长期)内存泄漏的原因。