我想知道如何将“已处理”RoutedEvents的订阅转换为WeakEventManager?
UIElement有以下方法订阅“处理”RoutedEvents: UIElement.AddHandler(RoutedEvent routedEvent,委托处理程序,bool handledEventsToo)
那么,如何将其转换为泛型WeakEventManager表单呢?
发布于 2013-09-13 19:19:39
您应该能够遵循创建自定义事件管理器来自MSDN的指南,并实现StartListening和StopListening,如下所示:
protected override void StartListening(object source) {
var sourceElement = (UIElement)source;
sourceElement.AddHandler(RoutedEvent, OnRoutedEvent, true);
}
protected override void StopListening(object source) {
var sourceElement = (UIElement)source;
sourceElement.RemoveHandler(RoutedEvent, OnRoutedEvent, true);
}我不认为对此使用通用WeakEventManager很有意义,因为它使用事件名并在内部调用Type.GetEvent,当您使用RoutedEvents和AddHandler而不是“真实”事件时,这一点都没有用。但是,您可以编写自己的通用基类来使用RoutedEvents。
就我个人而言,我使用基于达斯汀·坎贝尔的WeakEventHandler的自己的弱事件解决方案。它的好处是,它不是在内部管理添加和删除,而是提供了原始委托的“弱”版本,您可以自由地传递.因此,在以不同的方式添加委托时,不需要自定义弱事件管理器的实现,因为在这两种情况下的用法都是相同的:
uielement.MouseDown += weakMouseDownHandler;
uielement.AddHandler(UIElement.MouseDownEvent, weakMouseDownHandler, true);https://stackoverflow.com/questions/18565396
复制相似问题