Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Prism如何将模块视图绑定到应用程序范围的属性_C#_Design Patterns_Mvvm_Binding_Prism - Fatal编程技术网

C# Prism如何将模块视图绑定到应用程序范围的属性

C# Prism如何将模块视图绑定到应用程序范围的属性,c#,design-patterns,mvvm,binding,prism,C#,Design Patterns,Mvvm,Binding,Prism,我知道这看起来很愚蠢,但是,使用MVVM和Prism绑定应用程序范围的属性的最佳方法是什么 问题:连接状态{…}(实现INotifyPropertyChanged等) 如何在特定模块中访问此属性?我希望能够跨不同模块使用Status属性 跨不同模块获取这些数据的最佳方式是什么 解决方案 目前,我倾向于在基础设施项目中使用以下视图模型(跨模块共享) 在IoC中,将AppViewModel定义为Singleton,并将其传递给ModuleViewModel namespace Project.Mod

我知道这看起来很愚蠢,但是,使用MVVM和Prism绑定应用程序范围的属性的最佳方法是什么

问题
连接状态{…}
(实现INotifyPropertyChanged等)

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

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

解决方案

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

在IoC中,将
AppViewModel
定义为
Singleton
,并将其传递给
ModuleViewModel

namespace Project.ModuleA 
{
    AppViewModel _appViewModel;

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

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

例如

  • 使用
    EventAggregator
    ConnectionStatusChangeEvent
    订阅和发布连接中的更改?但在这种情况下,如果有人在事件发布(如在线)后订阅该事件,他们将不会获得任何起始值,因此可以在开始时使用
    IStatusService

  • 使用
    RegionContext
    并将其绑定到
    Shell中的
    Status
    属性?但这似乎违背了
    Shell
    不知道模块使用什么的目的

  • 还是我完全错过了什么


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

    我不喜欢ViewModels相互了解。我采用了您在例1中列出的方法—EventAggregator帮助我移动信息。目前,我使用数据库连接和设置来实现这一点,这两种设置都在viewmodels中使用。在第一次创建模型属性并在更新时传递该属性

    创建模型的ViewModel订阅请求和更新请求,并发布响应。因此,请求返回当前属性,UpdateRequest将根据需要刷新或重新创建

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



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

    我不喜欢ViewModels相互了解。我采用了您在例1中列出的方法—EventAggregator帮助我移动信息。目前,我使用数据库连接和设置来实现这一点,这两种设置都在viewmodels中使用。在第一次创建模型属性并在更新时传递该属性

    创建模型的ViewModel订阅请求和更新请求,并发布响应。因此,请求返回当前属性,UpdateRequest将根据需要刷新或重新创建

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


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

    namespace Project.ModuleA 
    {
        AppViewModel _appViewModel;
    
        public class ModuleViewModel
        {
            public ModuleViewModele(AppViewModel appViewModel)
            {
                ....
            }
        }
    }