【问题标题】:Call Message Alert from WPF View Model in PRISM Modular Application从 PRISM 模块化应用程序中的 WPF 视图模型调用消息警报
【发布时间】:2021-07-09 18:33:34
【问题描述】:

我们是 Window 应用程序的新手,我们正在开发基于 WPF 的窗口应用程序。我们使用 MVVM 架构模式和 PRISM 框架。我们使用 Telerik 控件为应用程序制作了丰富的 UI。

我们在 PRISM 中开发了模块化应用程序,如 Prism Sample For WPF-07 Applications 所示。 在这种情况下,我们有一个主应用程序将拥有 Bootstrapper 类和所有子模块的引用。

当用户执行的某些操作完成时,我们想调用警报框。我们想从许多不同页面的视图模型中调用此警报框,其中一些存在于子模块中,而少数存在于具有引导程序的主应用程序中。

我们希望设计可以跨应用程序使用的通用警报控件。

在之前下载的 WPF PRISM 示例中,它具有从 ViewModel 调用弹出窗口的代码示例,如 stack overflow question 中所述。

但是这个功能在新的 Prism 版本中不再存在。此外,Github 上对话服务的新功能不存在示例应用程序。

我们现在知道“交互”已被DialogService 替换,并且按照文档我们在主应用程序中创建了自定义警报,但是我们如何在所有子模块中使用此警报?

我们如何设计可从所有模块访问的自定义公共警报? 请帮助我们实现这一通用功能。

【问题讨论】:

  • 您的问题到底是什么?为什么你认为你不能在你的视图模型中使用对话服务?这一切与 modules 有什么关系?
  • @Haukinger 我可以在我们的视图模型中使用对话服务。 Infect 我们知道这是在应用程序中实现自定义警报的方式。我的问题陈述是我们如何设计对话服务,以便我们可以在所有子模块和主应用程序中使用它?这就像设计和注册一次并在所有其他应用程序中使用它。我们在哪里可以设计和注册它以及如何从其他模块中调用它?

标签: c# wpf mvvm telerik prism


【解决方案1】:

如何从其他模块调用它?

当一个服务(如DialogService)在容器中注册时,如果这些服务是从容器中解析的,它将被注入到所有请求它作为依赖项的构造函数中。

这适用于public MyViewModel( IDialogService dialogService ) { ... },无论MyViewModel 的代码位于何处,只要它被容器调用即可。无论它位于何处,视图模型都必须链接到它的视图(通过命名约定或显式调用)才能被视图模型定位器找到(并因此由框架“神奇地”创建) 你必须自己解决它(例如,通过注入 Func< MyViewModel> 或手动编码的工厂或 - 不要这样做 - 通过注入容器或 - 也避免这种情况 - 通过调用 new 并自己提供依赖项) .

对于在主应用程序中定义的视图模型和在模块中定义的视图模型,所有这些工作方式完全相同。

【讨论】:

  • 感谢 Haukinger 知道如何使用您的答案来实现这一点。
猜你喜欢
  • 2018-10-01
  • 1970-01-01
  • 2011-12-25
  • 1970-01-01
  • 2013-01-31
  • 1970-01-01
  • 2012-04-13
  • 2014-01-18
  • 2011-04-16
相关资源
最近更新 更多