Wpf 关闭窗口时删除Prism中的ViewModels
我有一个winform应用程序,其中的数据网格行带有一些图标。 当用户单击其中一个图标时,将打开一个WPF窗口。 我已经使用Prism创建了这个WPF窗口,即它的外壳和区域映射到视图 我面临的问题是: 当我试图关闭WPF窗口时,出现异常“无法在窗口关闭后设置可见性或调用Show、ShowDialog或WindowInteropHelper.EnsureHandle” 我知道我们可以通过隐藏窗口而不是关闭窗口来解决问题。 然而,这使得我的ViewModel和服务代表了旧的WPF窗口。 我将静态计数器保留在ViewModels中,并观察到每次打开WPF窗口时,静态计数都会增加,这意味着我的旧视图模型不会被破坏 我想知道如何正确处理这个场景,这样当我关闭窗口时,所有与窗口相关的东西都应该被处理掉。Wpf 关闭窗口时删除Prism中的ViewModels,wpf,prism,unity-container,Wpf,Prism,Unity Container,我有一个winform应用程序,其中的数据网格行带有一些图标。 当用户单击其中一个图标时,将打开一个WPF窗口。 我已经使用Prism创建了这个WPF窗口,即它的外壳和区域映射到视图 我面临的问题是: 当我试图关闭WPF窗口时,出现异常“无法在窗口关闭后设置可见性或调用Show、ShowDialog或WindowInteropHelper.EnsureHandle” 我知道我们可以通过隐藏窗口而不是关闭窗口来解决问题。 然而,这使得我的ViewModel和服务代表了旧的WPF窗口。 我将静态计数
我试着在ShellViewModel中执行container.dispose,但是仍然没有成功。这里有两个方面。首先,您可以在视图模型上使用
regionmemberlifetime属性
,或者实现IRegionMemberLifetime
,使Prism每次都创建一个新实例
其次,您必须创建自己的
RegionBehavior
(或从中获取)来创建Prism dispose视图模型。您可以使用Prism提供的新IDialogService,我认为IDialogService主要用于替换MessageBox用例。在我的例子中,我在WPF上有一个相当复杂的UI,在一个shell中有3个区域。您可以使用自己的ViewModel、regions等组合IDialogService,并使用一个作用域管理器。否则,您将需要创建外壳服务-->这已经有了答案: