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

时间:2015-10-21 15:05:29

标签: c# wpf xaml windows-runtime reactive-programming

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

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

所以基本上,FP /反应时尚。页面和UI绑定到全局状态对象的属性,每当视图想要更新某些内容时,它会直接(或通过视图模型类,无论如何)更改全局应用程序状态,立即更新应用程序的所有其他相关部分(通过绑定)。

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

然而,理想情况下,即使我完全替换全局状态对象,我也希望这发生。让我们说,它是一个多用户应用程序,然后我想切换这样的用户:

App.State = LoadStateForUser(...);

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

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

1 个答案:

答案 0 :(得分:0)

你可以这样做,但肯定不会是自动的。

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

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