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