c# - Prism 如何将模块 View 绑定(bind)到应用程序范围的属性

标签 c# design-patterns mvvm binding prism

我知道这可能看起来很傻,但是,使用 MVVM 和 Prism 绑定(bind)到 Application Wide 属性的最佳方法是什么?

问题 : ConnectionStatus Status {...} (实现 INotifyPropertyChanged 等。)

如何在特定模块中访问此属性?我希望能够跨不同模块使用 Status 属性?

跨不同模块获取这些数据的最佳方式是什么?

解决方案

目前我倾向于在基础设施项目中使用以下 View 模型(跨模块共享)

namespace Project.Infrastructure 
{
    public class AppViewModel
    {
        public ConnectionStatus Status {...}
    }
}

在 IoC 中定义 AppViewModelSingleton , 并将其传递给 ModuleViewModel 的构造函数
namespace Project.ModuleA 
{
    AppViewModel _appViewModel;

    public class ModuleViewModel
    {
        public ModuleViewModele(AppViewModel appViewModel)
        {
            ....
        }
    }
}

问题

这是最好的方法还是有更好的方法?

例如。
  • 使用 EventAggregatorConnectionStatusChangeEvent订阅和发布连接中的更改?但是在这种情况下,如果有人在事件发布后(例如在线)订阅了该事件,他们将不会获得任何起始值,因此 IStatusService一开始可以用吗?
  • 使用 RegionContext并将其绑定(bind)到 Status Shell 中的属性(property)?但这似乎违背了 Shell 的目的。不知道模块使用什么等等。

  • 还是有什么我完全错过的?

    我已经阅读了整个 Prism(v4) 文档,但不能 100% 确定哪个是实现这一点的最佳方式。

    最佳答案

    我不喜欢 ViewModel 彼此了解。我采用了您在 E.g #1 中列出的方法 - EventAggregator 协助为我移动信息。我目前使用数据库连接和设置来执行此操作,两者都在整个 View 模型中使用。我在模型属性第一次创建和更新后传递它。

    创建模型的 ViewModel 订阅 Request 和 UpdateRequest,并发布 Response。所以一个 Request 返回当前属性,UpdateRequest 将根据需要刷新或重新创建。

    响应将推送到任何监听器 - 例如新创建的 ViewModel,其构造函数中有请求的发布。这意味着构造函数不会初始化所有内容,您将让 Response 监听器覆盖额外的工作,有时您可能需要等待多个响应完全初始化。

    你问什么是最好的方法...... - 我觉得我的回答是正确的,但是做适合你的项目的事情。我喜欢严格的 MVVM,但它并不总是那么严格。

    关于c# - Prism 如何将模块 View 绑定(bind)到应用程序范围的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18862058/

    相关文章:

    c# - 不确定进度条

    wpf - 在 'System.Windows.StaticResourceExtension' 上提供值引发异常

    c# - TPL Dataflow SingleProducerConstrained 是指源 block 的数量还是它们的并行度?

    c# - 是否有一些实现日志记录功能的类,我可以使用?

    c# - 行动委托(delegate)。如何获取调用方法的实例

    oop - 如何模拟一个抽象类并调用它的构造函数?

    c# - 如何与多个 ViewModel 共享多个 ObservableCollection?

    c# - 检查当前用户是否活跃?

    .net - 领域驱动设计 : How to access child of aggregate root

    使用请求与上下文的身份验证