在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
当使用MVVM时,你的应用程序是你的ViewModels,而不是你的Views。您不应该处理任何类型的业务逻辑,例如导航或从视图传递User对象。View只是一个漂亮的层,允许用户轻松地与ViewModels交互。
通常在这种情况下,我使用一个ShellViewModel
,其中包含一个CurrentPage
属性,被设置为任何ViewModel是CurrentPage。我也会在ShellViewModel
中存储CurrentUser
属性。
你的ShellViewModel是你的启动对象,并且在启动时CurrentPage
将是LoginViewModel
。当用户成功登录时,LoginViewModel
广播一条带有CurrentUser
参数的LoginSuccessful
消息,ShellViewModel
接收该消息并根据该消息参数设置CurrentUser
,并将CurrentView
切换为新的MainPageViewModel
举个例子,请看我的文章