【问题标题】:Removing ViewModels in Prism when Closing Window关闭窗口时删除 Prism 中的 ViewModel
【发布时间】:2019-11-25 06:59:20
【问题描述】:

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

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

我想如何正确处理这种情况,这样当我关闭窗口时,与窗口相关的所有内容都应该被处理掉。 我尝试在 ShellViewModel 中做 container.dispose,但是还是不行。

【问题讨论】:

  • 您可以使用 Prism 提供的新 IDialogService github.com/PrismLibrary/Prism/pull/1682
  • 我觉得IDialogService主要是用来替换MessageBox用例的。就我而言,我在 WPF 上有一个非常复杂的 UI,外壳中有 3 个区域。
  • 您可以使用自己的 ViewModel、Regions 等组合 IDialogService,并使用范围区域管理器。否则你需要创建一个 ShellService --> 已经有答案了:stackoverflow.com/questions/33010756/…

标签: wpf prism unity-container


【解决方案1】:

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

其次,您必须创建自己的RegionBehavior(或从Github Issue 获取)来制作 Prism 处置视图模型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    • 1970-01-01
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-19
    相关资源
    最近更新 更多