我有一个带有一些图标的数据网格行的winform应用程序。当用户单击其中一个图标时,将打开WPF窗口。我已经使用Prism创建了这个WPF窗口,即它具有将外壳和区域映射到视图的功能。
我面临的问题是:当我尝试关闭WPF窗口时,出现异常“关闭窗口后无法设置可见性或调用Show,ShowDialog或WindowInteropHelper.EnsureHandle”。我了解我们可以通过隐藏窗口而不是关闭窗口来解决此问题。但是,这使我的ViewModel和Services代表了较旧的WPF窗口。我将静态计数器保留在ViewModels中,并观察到每次打开WPF窗口时,静态计数都会增加,这意味着我的旧视图模型不会被破坏。
我想如何正确处理此情况,以便在关闭窗口时,与窗口相关的所有事物都应丢弃。我试图在ShellViewModel中进行container.dispose,但是仍然无法正常工作。
这里有两个方面。首先,您可以在视图模型上使用RegionMemberLifetimeAttribute
或实现IRegionMemberLifetime
来使Prism每次创建一个新实例。
第二,您必须创建自己的RegionBehavior
(或从此Github Issue中获取它来使Prism处置视图模型。