我有一个MVVM模式的问题。所以我不确定,我已经完全理解了它。
我的情景:
我的示例应用。很简单:用户可以登录并进入MainPageView。
MainPageView使用MainPageViewModel。我使用MVVMLight框架的messenger从LoginView导航到MainPageView。
Messenger.Default.Register<LoginPerson>(this, Constants.NavigateLogin,
person => this.Window.SetContentControl(new MainPage(person)));
我将登录的人传递给视图。 MainPage - View会将登录的人员设置为其ViewModel(=&gt; MainPageViewModel)。
这种方式是否正确?我不这么认为:-)我如何在ViewModels之间进行通信?谢谢你的建议。
问候,亲
答案 0 :(得分:2)
使用MVVM时,您的应用程序是您的ViewModel,而不是您的视图。您不应该处理任何类型的业务逻辑,例如导航或从您的视图中传递用户对象。 View只是一个漂亮的层,允许用户轻松地与ViewModels交互。
通常在这种情况下,我使用ShellViewModel
,其中包含一个CurrentPage
属性,该属性设置为ViewModel是CurrentPage。我也会在CurrentUser
中存储ShellViewModel
属性。
您的ShellViewModel是您的启动对象,在启动时CurrentPage
将是LoginViewModel
。当用户成功登录后,LoginViewModel
会广播LoginSuccessful
消息,参数为CurrentUser
,ShellViewModel
会接收该消息并设置CurrentUser
}根据消息参数,将CurrentView
切换为新的MainPageViewModel
例如,请查看我的帖子here