C#/WinRT 中的全局状态对象

Global state object in C#/WinRT

为了简单起见,我尝试在 C#/XAML/WinRT 中实现以下架构:

Global App State -> Bindings -> Pages / User Controls etc -|
        ^                                                  |
        |------------- update -----------------------------|

所以基本上,FP/reactive-stylish。页面和 UI 绑定到全局状态对象的属性,每当视图想要更新某些内容时,它会直接更改全局应用程序状态(或通过视图模型 class,随便什么),更新应用程序的所有其他依赖部分立即(通过绑定)。

我知道 DependencyPropertiesINotifyPropertyChanged,所以绑定到属性应该不是问题。

然而,理想情况下,我希望这种情况发生即使我完全替换了全局状态对象。比方说,它是一个多用户应用程序,那么我想像这样切换用户:

App.State = LoadStateForUser(...);

和 UI 的所有部分绑定到全局状态更新。现在我必须自己设置每个不同的属性。这有可能吗?

请注意,我不是在征求有关 MVC 或 MVVM 或任何其他设计模式的建议。

您可以这样做,但肯定不会自动进行。

我会在 App(或 GloablStateService 或其他)上发生一个事件,表明全局状态已更改(GlobalStateChanged 似乎是合理的)。

然后您的视图模型将订阅此事件,当它由上面显示的 setter 引发时,引发正确的 PropertyChanged 事件以便 UI 更新。如果您的视图模型的主要绑定 属性 是对全局状态对象的简单引用,那么这应该只是一个事件引发。