【发布时间】:2019-02-05 03:10:39
【问题描述】:
如here 所述,PropertyChangedEventManager 类
提供 WeakEventManager 实现,以便您可以使用“弱事件侦听器”模式为 PropertyChanged 事件附加侦听器。
订阅属性变更有两种方式:
void AddHandler (INotifyPropertyChanged source, EventHandler<PropertyChangedEventArgs> handler, string propertyName)
void AddListener (INotifyPropertyChanged source, IWeakEventListener listener, string propertyName)
它们最终都调用了相同的方法:
private void AddListener(INotifyPropertyChanged source, string propertyName, IWeakEventListener listener, EventHandler<PropertyChangedEventArgs> handler)
将listener 或handler 设置为null。
我需要使用强事件处理程序(即source.PropertyChange += handler;)更改一些代码以遵循弱模式。使用AddHandler 方法很简单。有什么理由更喜欢AddListener(这需要我实现IWeakEventListener)?
如果我要编写新代码,为什么会更喜欢其中一个?
【问题讨论】:
-
据我所见,AddListener 的成本略低,但并不显着。似乎
AddHandler会更容易创建自己的泄漏(查看您需要如何跟踪委托) -
@CoryNelson 但是“弱事件模式”的目的不是避免泄漏吗?我会假设这两种实现都是这样做的。或者,“需要跟踪代表”是什么意思?这就是你必须为正常事件做的事情——但不是在这里,或者?无论哪种情况,监听器还是处理程序?
标签: c# wpf events inotifypropertychanged