我知道这可能看起来很傻,但是,使用 MVVM 和 Prism 绑定到 Application Wide 属性的最佳方法是什么?
问题:(ConnectionStatus Status {...}
实现 INotifyPropertyChanged 等。)
如何在特定模块中访问此属性?我希望能够跨不同模块使用 Status 属性?
跨不同模块获取这些数据的最佳方式是什么?
解决方案
目前我倾向于在基础设施项目中使用以下视图模型(跨模块共享)
namespace Project.Infrastructure
{
public class AppViewModel
{
public ConnectionStatus Status {...}
}
}
并在 IoC 中定义AppViewModel
为Singleton
,并将 this 传递给ModuleViewModel
namespace Project.ModuleA
{
AppViewModel _appViewModel;
public class ModuleViewModel
{
public ModuleViewModele(AppViewModel appViewModel)
{
....
}
}
}
问题
这是最好的方法还是有更好的方法?
例如
使用
EventAggregator
andConnectionStatusChangeEvent
订阅和发布连接中的更改?但是在这种情况下,如果有人在事件发布(例如在线)后订阅了该事件,他们将不会获得任何起始值,那么IStatusService
可以在开始时使用 a 吗?使用
RegionContext
并将其绑定到?中的Status
属性Shell
但这似乎违背了Shell
不知道模块使用什么等的目的。
还是有什么我完全错过的?
我已经阅读了整个 Prism(v4) 文档,但不能 100% 确定哪个是实现这一点的最佳方式。