为简单起见,我试图在C#/ XAML / WinRT中实现以下架构:
Global App State -> Bindings -> Pages / User Controls etc -|
^ |
|------------- update -----------------------------|
所以基本上,FP /反应时尚。页面和UI绑定到全局状态对象的属性,每当视图想要更新某些内容时,它会直接(或通过视图模型类,无论如何)更改全局应用程序状态,立即更新应用程序的所有其他相关部分(通过绑定)。
我知道DependencyProperties
和INotifyPropertyChanged
,因此绑定到属性应该不是问题。
然而,理想情况下,即使我完全替换全局状态对象,我也希望这发生。让我们说,它是一个多用户应用程序,然后我想切换这样的用户:
App.State = LoadStateForUser(...);
并且UI的所有部分都绑定到全局状态更新。现在我必须自己设置每个不同的属性。这有可能吗?
注意,我不是在询问有关MVC或MVVM或其他任何设计模式的建议。
答案 0 :(得分:0)
你可以这样做,但肯定不会是自动的。
我会在App
(或GloablStateService
或其他)上发生一个事件,表明全局状态已发生变化(GlobalStateChanged
似乎合理)。
然后,您的视图模型将订阅此事件,当您在上面显示的setter引发它时,请引发正确的PropertyChanged
事件,以便UI更新。如果您的viewmodel的主要绑定属性是对全局状态对象的简单引用,那么这应该只是一个事件引发。