我正在试验Prism并创建了一个简单的应用程序,包括一个带有Prism区域的主窗口,以及两个" child"视图(和VM)。这些子视图中的每一个都有一个按钮,单击此按钮只需导航到另一个视图,例如:
_regionManager.RequestNavigate("MainWindowRegion", "HomeView");
子视图和视图模型实现IDisposable
,并且已经获得了" Transient"我的DI容器中的寿命。此外,视图实现IRegionMemberLifetime
(KeepAlive = false)。
尽管如此,这些观点并没有得到处理(直到我关闭申请)。我错过了什么?当我离开时,如何处理视图?
或者将子视图注册为单例并在我导航到它们时初始化它们会更简单吗?
答案 0 :(得分:1)
如果您希望触发IDisposable方法,那就是您正在使用的方法来确定您的观点是否正在被处理"然后你做错了。这不是它的工作原理。 GC准备就绪后即可完成工作。如果您正在使用IRegionMemberLifetime,那么您正在执行所需操作,以便从区域中删除视图并将其用于GC。您将要对IDisposable及其在WPF中的工作方式进行一些研究。
答案 1 :(得分:1)
您需要将Prism.Navigation的IDestructible实现到您的视图模型,如本文底部所述:
https://prismlibrary.com/docs/xamarin-forms/creating-your-first-prism-app.html
当用户离开时,这将在视图模型中调用public void Destroy()
。