首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用WPF 4.5通用弱事件管理器处理路由事件?

使用WPF 4.5通用弱事件管理器处理路由事件?
EN

Stack Overflow用户
提问于 2013-09-02 03:42:47
回答 1查看 2.6K关注 0票数 2

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

UIElement有以下方法订阅“处理”RoutedEvents: UIElement.AddHandler(RoutedEvent routedEvent,委托处理程序,bool handledEventsToo)

那么,如何将其转换为泛型WeakEventManager表单呢?

EN

回答 1

Stack Overflow用户

发布于 2013-09-13 19:19:39

您应该能够遵循创建自定义事件管理器来自MSDN的指南,并实现StartListeningStopListening,如下所示:

代码语言:javascript
复制
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的自己的弱事件解决方案。它的好处是,它不是在内部管理添加和删除,而是提供了原始委托的“弱”版本,您可以自由地传递.因此,在以不同的方式添加委托时,不需要自定义弱事件管理器的实现,因为在这两种情况下的用法都是相同的:

代码语言:javascript
复制
uielement.MouseDown += weakMouseDownHandler;

uielement.AddHandler(UIElement.MouseDownEvent, weakMouseDownHandler, true);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18565396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档