【发布时间】: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