关闭时删除 Prism 中的 ViewModels Window
Removing ViewModels in Prism when Closing Window
我有一个 winform 应用程序,其中包含带有一些图标的数据网格行。
当用户单击其中一个图标时,将打开 WPF window。
我使用 Prism 创建了这个 WPF window,即它有 shell 和映射到视图的区域。
我面临的问题是:
当我尝试关闭 WPF window 时,出现异常 "Cannot set Visibility or call Show, ShowDialog, or WindowInteropHelper.EnsureHandle after a Window has closed."
我知道我们可以通过隐藏 window 而不是关闭它来解决问题。
但是,这使我的 ViewModel 和服务代表较旧的 WPF window。
我在 ViewModels 中保留了静态计数器,并观察到每次打开 WPF window,静态计数都会增加,这意味着我的旧视图模型没有被破坏。
我想知道如何正确处理这种情况,以便在我关闭 window 时,与 window 相关的所有内容都应该被处理掉。
我尝试在 ShellViewModel 中执行 container.dispose,但是,它仍然不起作用。
这里有两个方面。首先,您可以在视图模型上使用 RegionMemberLifetimeAttribute
或实施 IRegionMemberLifetime
让 Prism 每次都创建一个新实例。
其次,您必须创建自己的 RegionBehavior
(或从这个 Github Issue 中获取)以使 Prism 处理视图模型。
我有一个 winform 应用程序,其中包含带有一些图标的数据网格行。 当用户单击其中一个图标时,将打开 WPF window。 我使用 Prism 创建了这个 WPF window,即它有 shell 和映射到视图的区域。
我面临的问题是: 当我尝试关闭 WPF window 时,出现异常 "Cannot set Visibility or call Show, ShowDialog, or WindowInteropHelper.EnsureHandle after a Window has closed." 我知道我们可以通过隐藏 window 而不是关闭它来解决问题。 但是,这使我的 ViewModel 和服务代表较旧的 WPF window。 我在 ViewModels 中保留了静态计数器,并观察到每次打开 WPF window,静态计数都会增加,这意味着我的旧视图模型没有被破坏。
我想知道如何正确处理这种情况,以便在我关闭 window 时,与 window 相关的所有内容都应该被处理掉。 我尝试在 ShellViewModel 中执行 container.dispose,但是,它仍然不起作用。
这里有两个方面。首先,您可以在视图模型上使用 RegionMemberLifetimeAttribute
或实施 IRegionMemberLifetime
让 Prism 每次都创建一个新实例。
其次,您必须创建自己的 RegionBehavior
(或从这个 Github Issue 中获取)以使 Prism 处理视图模型。