我想知道将 WeakEventManager(4.5 很好)与提供 DependencyPropertyChangedEventArgs 的事件一起使用的最佳方法是什么。这些不是从 EventArgs 派生的(出于性能原因),因此 WeakEventManager 不能开箱即用。
任何指南、链接或提示将不胜感激!
我想知道将 WeakEventManager(4.5 很好)与提供 DependencyPropertyChangedEventArgs 的事件一起使用的最佳方法是什么。这些不是从 EventArgs 派生的(出于性能原因),因此 WeakEventManager 不能开箱即用。
任何指南、链接或提示将不胜感激!
使用.NET 中内置的PropertyChangedEventManager 。
我不确定使用“PropertyChangedEventManager”如何解决有关“WeakEventManager”和绑定使用“DependencyPropertyChangedEventArgs”的弱事件处理程序的问题。
“PropertyChangedEventManager”适用于“PropertyChangedEventArgs”的实例,该实例派生自“EventArgs”,而“DependencyPropertyChangedEventArgs”则没有。这就是为什么标准方法不起作用的原因。
在这种情况下,您始终可以使用手动方法(“WeakEventHandler”在“MyType”类的范围内声明):
private class WeakEventHandler
{
private readonly System.WeakReference<MyType> m_WeakMyTypeRef;
public WeakEventHandler(MyType myType) => m_WeakMyTypeRef = new System.WeakReference<MyType>(myType);
public void OnClientIsKeyboardFocusWithinChanged(object sender, DependencyPropertyChangedEventArgs args)
{
if (m_WeakMyTypeRef.TryGetTarget(out var myType))
myType.OnClientIsKeyboardFocusWithinChanged(sender, args);
}
}
以及要绑定的代码(来自“MyType”方法):
var weakEventHandler = new WeakEventHandler(this);
frameworkElement.IsKeyboardFocusWithinChanged += weakEventHandler.OnClientIsKeyboardFocusWithinChanged;
缺点是您必须声明一个新的(私有)类,尽管同一个类可以处理多个事件。