在MVVMLight中设置ViewModel的DataContext

时间:2011-09-27 15:01:09

标签: c# mvvm mvvm-light

我有一个MVVM模式的问题。所以我不确定,我已经完全理解了它。

我的情景:

  • ViewModelLocator:将请求的ViewModel提供给指定的视图。
  • LoginViewModel:LoginView的ViewModel
  • MainPageViewModel:MainPageView的ViewModel

我的示例应用。很简单:用户可以登录并进入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之间进行通信?谢谢你的建议。

问候,亲

1 个答案:

答案 0 :(得分:2)

使用MVVM时,您的应用程序是您的ViewModel,而不是您的视图。您不应该处理任何类型的业务逻辑,例如导航或从您的视图中传递用户对象。 View只是一个漂亮的层,允许用户轻松地与ViewModels交互。

通常在这种情况下,我使用ShellViewModel,其中包含一个CurrentPage属性,该属性设置为ViewModel是CurrentPage。我也会在CurrentUser中存储ShellViewModel属性。

您的ShellViewModel是您的启动对象,在启动时CurrentPage将是LoginViewModel。当用户成功登录后,LoginViewModel会广播LoginSuccessful消息,参数为CurrentUserShellViewModel会接收该消息并设置CurrentUser }根据消息参数,将CurrentView切换为新的MainPageViewModel

例如,请查看我的帖子here