2

我想知道如何将“已处理”RoutedEvents 的订阅转换为 WeakEventManager?

UIElement 具有以下订阅“已处理”RoutedEvents 的方法: UIElement.AddHandler(RoutedEvent routedEvent, Delegate handler, boolhandledEventsToo)

那么如何将其转换为 Generic WeakEventManager 表单呢?

4

1 回答 1

2

您应该能够按照从 MSDN创建自定义事件管理器的指南进行操作,StartListeningStopListening像这样实现:

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);
}

我认为为此使用通用 Wea​​kEventManager 没有多大意义,因为它使用事件名称并在内部调用Type.GetEvent,当您使用 RoutedEvents 和 AddHandler 而不是“真实“事件。但是,您可以编写自己的通用基类来使用 RoutedEvents。


就个人而言,我使用自己的基于Dustin Campbell 的 WeakEventHandler的弱事件解决方案。它的好处是,它不是在内部管理添加和删除,而是为您提供了原始委托的“弱”版本,您可以自由传递......因此在添加时无需自定义弱事件管理器的实现以不同的方式代表,因为两种情况下的用法相同:

uielement.MouseDown += weakMouseDownHandler;

uielement.AddHandler(UIElement.MouseDownEvent, weakMouseDownHandler, true);
于 2013-09-13T19:19:39.143 回答