我想知道如何将“已处理”RoutedEvents 的订阅转换为 WeakEventManager?
UIElement 具有以下订阅“已处理”RoutedEvents 的方法: UIElement.AddHandler(RoutedEvent routedEvent, Delegate handler, boolhandledEventsToo)
那么如何将其转换为 Generic WeakEventManager 表单呢?
我想知道如何将“已处理”RoutedEvents 的订阅转换为 WeakEventManager?
UIElement 具有以下订阅“已处理”RoutedEvents 的方法: UIElement.AddHandler(RoutedEvent routedEvent, Delegate handler, boolhandledEventsToo)
那么如何将其转换为 Generic WeakEventManager 表单呢?
您应该能够按照从 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 的 WeakEventHandler的弱事件解决方案。它的好处是,它不是在内部管理添加和删除,而是为您提供了原始委托的“弱”版本,您可以自由传递......因此在添加时无需自定义弱事件管理器的实现以不同的方式代表,因为两种情况下的用法相同:
uielement.MouseDown += weakMouseDownHandler;
uielement.AddHandler(UIElement.MouseDownEvent, weakMouseDownHandler, true);