有没有一种安全的方法可以在没有副作用的情况下分离/卸载行为?

12
在WPF和WinRT中,有一个众所周知的问题:行为对象无法可靠地调用其Detach方法。避免内存泄漏的唯一方法是订阅AssociatedObject的Unloaded事件并取消挂接所有事件(示例)。
到目前为止这样做可以解决问题。
但我意识到(正如其他人在我链接的博客文章中发表评论的那样),这种方法会导致已卸载的行为对象再也无法重新附加。例如,如果将行为对象附加到MenuFlyoutItem,则在关闭该菜单项时,行为对象会被卸载。如果您再次打开该菜单,则不会重新附加该行为对象。
其他用户控件也会发生这种情况。在我的WinRT应用程序中,当我从一个页面导航到另一个页面并返回时,我会“丢失”行为对象,尽管所有控件均重新创建。我不知道如何在WinRT应用程序中使用它们,因为在其中浏览会大量重新创建控件。是否已经有解决此问题的方案?

也许我漏掉了什么,但如果你在卸载时分离,那么你只需要在加载时附加即可,不是吗? - McGarnagle
5
@MassimoCacchiotti,修复很简单 - 等待另外10天新的 Behaviors SDK for UWP 版本发布。 :) 目前问题出在旧版本(8.1)。在新版本中,Detach函数将被正确调用(是的,我已经测试过了)。 - Justin XL
1
太棒了,感谢 @Justin XL!! :) - Maximus
@Justin XL,我忘了问你,你是怎么知道他们什么时候会发布新版本的?你有没有一个博客或网站的链接可以说明更新什么时候到来?再次感谢! - Maximus
1
我从他们那里得到了预发布的SDK。 :) 很抱歉我不能分享它,但如果你想现在测试它,也许可以请Unni发送给你预发布链接。 - Justin XL
显示剩余5条评论
1个回答

4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接