关闭窗口时在棱镜中移除ViewModels

问题描述 投票:-1回答:1

我有一个带有一些图标的数据网格行的winform应用程序。当用户单击其中一个图标时,将打开WPF窗口。我已经使用Prism创建了这个WPF窗口,即它具有将外壳和区域映射到视图的功能。

我面临的问题是:当我尝试关闭WPF窗口时,出现异常“关闭窗口后无法设置可见性或调用Show,ShowDialog或WindowInteropHelper.EnsureHandle”。我了解我们可以通过隐藏窗口而不是关闭窗口来解决此问题。但是,这使我的ViewModel和Services代表了较旧的WPF窗口。我将静态计数器保留在ViewModels中,并观察到每次打开WPF窗口时,静态计数都会增加,这意味着我的旧视图模型不会被破坏。

我想如何正确处理此情况,以便在关闭窗口时,与窗口相关的所有事物都应丢弃。我试图在ShellViewModel中进行container.dispose,但是仍然无法正常工作。

wpf prism unity-container
1个回答
0
投票

这里有两个方面。首先,您可以在视图模型上使用RegionMemberLifetimeAttribute或实现IRegionMemberLifetime来使Prism每次创建一个新实例。

第二,您必须创建自己的RegionBehavior(或从此Github Issue中获取它来使Prism处置视图模型。

© www.soinside.com 2019 - 2024. All rights reserved.