ViewModel事件通信

时间:2011-03-18 16:28:00

标签: silverlight windows-phone-7 mvvm-light

我正在创建一个WP7应用程序,如果用户尚未登录,我希望显示登录屏幕。我的Main.xaml有一个视图模型MainViewModel.cs。对于登录或注册部分,我将它们嵌入Grid作为Main.xaml,但我认为将它们作为用户控件也可以正常工作。登录和注册部分将拥有自己的视图模型,可能与AccountViewModel.cs相同,Grid或用户控件将其DataContext设置为。{/ p>

用户注册或登录后发生在AccountViewModel.csMainViewModel.csMain.xaml知道它已完成的最佳方式是什么,它可以开始加载数据,或做任何需要做的事情?

我最初的想法是使用MVVM Light的消息系统。注册/登录发生后,广播一条消息,表明它已完成,MainViewModel.cs将注册到该消息并可以对其进行操作。

是否有另一种方式或更正确的方式让Main知道其中的某个孩子已经发生了什么?

如果这太难遵循,我可以添加代码示例。

2 个答案:

答案 0 :(得分:2)

消息传递系统(例如MVVM Light中的消息传递系统)是一种很好的方式来解耦这些操作并以您描述的方式提供通知。不能说我真的提倡别的。 Prism库提供EventAggregator,它做同样的事情,但是如果你已经在使用MVVM Light,那么坚持下去。

答案 1 :(得分:0)

另一种方法是将这种信息(IsLoggedIn)存储在“全局视图模型”中,例如SettingsViewModel.Instance。对于像“设置”这样的全局意义的视图模型,这是一种很有意义的方法恕我直言。如果您使此属性引发PropertyChanged事件,则允许您在属性更改时动态修改UI,并例如平滑地隐藏登录UI。

欢呼声, 劳伦