gpt4 book ai didi

wpf - WeakEventManager 和 DependencyPropertyChangedEventArgs

转载 作者:行者123 更新时间:2023-12-02 02:40:13 25 4
gpt4 key购买 nike

我想知道将 WeakEventManager(4.5 很好)与提供 DependencyPropertyChangedEventArgs 的事件一起使用的最佳方法是什么。这些不是从 EventArgs 派生的(出于性能原因),因此 WeakEventManager 不能开箱即用。

任何指南、链接或提示将不胜感激!

最佳答案

我不确定使用“PropertyChangedEventManager”如何解决有关“WeakEventManager”和绑定(bind)使用“DependencyPropertyChangedEventArgs”的弱事件处理程序的问题。

“PropertyChangedEventManager”可与派生自“EventArgs”的“PropertyChangedEventArgs”实例配合使用,而“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);
}
}

以及要绑定(bind)的代码(来自“MyType”方法):

var weakEventHandler = new WeakEventHandler(this);
frameworkElement.IsKeyboardFocusWithinChanged += weakEventHandler.OnClientIsKeyboardFocusWithinChanged;

缺点是您必须声明一个新的(私有(private))类,尽管同一个类可以处理多个事件。

关于wpf - WeakEventManager 和 DependencyPropertyChangedEventArgs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14216543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com