我想知道如何将“Handled”RouteEvents的订阅转换为WeakEventManager?
UIElement 有以下方法来订阅“Handled”RotedEvents: UIElement.AddHandler(RoatedEventroutedEvent,委托(delegate)处理程序,boolhandledEventsToo)
那么如何将其转换为 Generic WeakEventManager 形式?
最佳答案
您应该能够按照创建自定义事件管理器的指南 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 的弱事件解决方案。它的好处是,它不是在内部管理添加和删除,而是为您提供了原始委托(delegate)的“弱”版本,您可以自由地传递它......因此在添加时无需自定义弱事件管理器的实现以不同的方式委托(delegate),因为两种情况下的用法是相同的:
uielement.MouseDown += weakMouseDownHandler;
uielement.AddHandler(UIElement.MouseDownEvent, weakMouseDownHandler, true);
关于c# - 使用 WPF 4.5 通用弱事件管理器来处理路由事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18565396/