在MVVMLight中设置ViewModel的DataContext

本文关键字:DataContext ViewModel 设置 MVVMLight | 更新日期: 2023-09-27 18:09:42

我有一个关于mvvm模式的问题。所以我不确定我是否完全理解了它。

我的场景:

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

我的例子应用程序很简单:用户可以登录并进入MainPageView。

MainPageView使用MainPageViewModel。我使用MVVMLight框架的信使从LoginView导航到MainPageView。

 Messenger.Default.Register<LoginPerson>(this, Constants.NavigateLogin,
                person => this.Window.SetContentControl(new MainPage(person)));

我将已登录的人传递给视图。MainPage - View将把登录的人设置为它的ViewModel (=> MainPageViewModel)。

这样正确吗?我不这么认为:-)我怎么能在ViewModels之间进行通信?谢谢你的建议。

问候,pro

在MVVMLight中设置ViewModel的DataContext

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

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

你的ShellViewModel是你的启动对象,并且在启动时CurrentPage将是LoginViewModel。当用户成功登录时,LoginViewModel广播一条带有CurrentUser参数的LoginSuccessful消息,ShellViewModel接收该消息并根据该消息参数设置CurrentUser,并将CurrentView切换为新的MainPageViewModel

举个例子,请看我的文章