我想知道如何将“Handled”RoutedEvents的订阅转换为WeakEventManager?
UIElement有以下方法来订阅“Handled”RoutedEvents: UIElement.AddHandler(RoutedEvent routedEvent,Delegate handler,bool handlingEventsToo)
那么如何将它转换为Generic WeakEventManager表单?
答案 0 :(得分:2)
您应该只需按照指南创建自定义事件管理器from 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。
就个人而言,我使用基于Dustin Campbell's WeakEventHandler的自己的弱事件解决方案。它的优点在于,它不是在内部管理添加和删除,而是为您提供原始委托的“弱”版本,您可以自由传递...因此在添加时无需自定义弱事件管理器的实现代表以不同的方式,因为两种情况下的用法相同:
uielement.MouseDown += weakMouseDownHandler;
uielement.AddHandler(UIElement.MouseDownEvent, weakMouseDownHandler, true);