我想知道什么是使用WeakEventManager(4.5很好)和提供DependencyPropertyChangedEventArgs的事件的最佳方式。这些不是从EventArgs派生的(出于性能原因),因此WeakEventManager无法正常运行。
任何指南,链接或提示都将受到高度赞赏!
答案 0 :(得分:3)
使用.NET内置的PropertyChangedEventManager。
答案 1 :(得分:0)
我不确定使用“PropertyChangedEventManager”如何解决有关“WeakEventManager”和绑定使用“DependencyPropertyChangedEventArgs”的弱事件处理程序的问题。
“PropertyChangedEventManager”与“PropertyChangedEventArgs”的实例一起使用,该实例派生自“EventArgs”,而“DependencyPropertyChangedEventArgs”则不然。这就是标准方法不起作用的原因。
在这种情况下,您始终可以使用手动方法(在“MyType”类的范围内声明“WeakEventHandler”):
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;
缺点是您必须声明一个新的(私有)类,尽管同一个类可以处理多个事件。