0

我正在尝试使用 Prism,并创建了一个简单的应用程序,该应用程序由一个带有 Prism 区域的主窗口以及两个“子”视图(和 VM)组成。这些子视图中的每一个都有一个按钮,单击它只是导航到另一个视图,例如:

_regionManager.RequestNavigate("MainWindowRegion", "HomeView");

子视图和视图模型实现IDisposable,并且在我的 DI 容器中被赋予了“瞬态”生命周期。此外,视图实现IRegionMemberLifetime(KeepAlive = false)。

尽管如此,视图并没有得到处理(直到我关闭应用程序)。我错过了什么?当我离开视图时如何处理它?

或者将子视图注册为单例并在我导航到它们时初始化它们会更简单吗?

4

2 回答 2

2

如果您期望您的 IDisposable 方法被触发,并且这就是您用来确定您的视图是否被“处置”的方法,那么您做错了。这不是它的工作原理。GC 将在准备就绪时完成其工作。如果您使用的是 IRegionMemberLifetime,那么您正在做您需要做的事情,以便从区域中删除视图并使其可用于 GC。您需要对 IDisposable 及其在 WPF 中的工作方式进行一些研究。

于 2017-06-06T14:45:43.380 回答
1

您需要将 IDestructible 从 Prism.Navigation 实现到您的视图模型,如本文底部所述:

https://prismlibrary.com/docs/xamarin-forms/creating-your-first-prism-app.html

public void Destroy()当用户导航离开时,这将在您的视图模型中调用。

于 2020-08-21T09:52:40.203 回答