首页 > 解决方案 > Catel 是否有任何方式同步显示窗口(基于 ViewModel)?

问题描述

我正在尝试将大型项目更新到最新的稳定 Catel 版本,并且需要找到 ShowDialog 替代方案,在我们的用例中转换为 ShowDialogAsync 根本不可能。

该项目停止将 Catel 更新与 Catel V4.2 集成,并且有一个大型代码库,其中使用 bool?IUIVisualizerService.ShowDialog(IViewModel) 大部分处理返回的bool?从 ShowDialog 并执行条件处理。
因此,我需要找到一种替代方法,等待窗口关闭而不阻塞 UIThread,并且由于缺乏人力和公司内部管理,目前无法将所有调用方法更改为异步、使用 TaskCommands 或将结果处理移至 EventHandlers .

这是旧的 V4.2 代码:

var uiVisualizerService = this.GetDependencyResolver().Resolve<IUIVisualizerService>();
return uiVisualizerService.ShowDialog(viewModelToShow);

理想的情况是仍然有一个像 ShowDialog 一样工作的 Catel 服务,或者找到一种不同的方式来同步显示 DataWindows。

编辑:
如果不是很明显,我不能简单地使用等待,因为需要重写 500 多个类中的方法,而不是手动测试(公司政策)或使用 Task.Wait、Task.Result... 等到期到 WPF 限制(如果我在主线程 UI 上使用阻塞调用,由于 WPF 的复杂性导致它等待机会在主线程上运行同步以执行新窗口的实际显示(实际上所有 UI 组件) 这会导致不可避免的死锁),因此它绝对无法以任何传统方式解决。

标签: c#wpfcatel

解决方案


自 4.2 以来,Catel 有更多的变化,而不仅仅是那些让我担心的异步内容。不知道为什么你没有保持最新,但你有两个选择:

  1. 坚持使用 4.2(仅在产品处于维护模式时推荐)
  2. 咬紧牙关更新,你会喜欢新功能和性能升级

4.2 于 2015 年 9 月 1 日发布,5.9 于 2019 年 1 月 28 日发布。那是近 4 年的开发和您需要计划的重大变更发布。


推荐阅读