C# 在MVVMLight中设置ViewModel的DataContext
我有一个关于MVVM模式的问题。所以我不确定,我是否已经完全理解了 我的设想:C# 在MVVMLight中设置ViewModel的DataContext,c#,mvvm,mvvm-light,C#,Mvvm,Mvvm Light,我有一个关于MVVM模式的问题。所以我不确定,我是否已经完全理解了 我的设想: ViewModelLocator:将请求的ViewModel提供给指定的视图 LoginView模型:LoginView的视图模型 MainPageViewModel:MainPageView的视图模型 我的示例应用程序。很简单:用户可以登录并进入MainPageView Messenger.Default.Register<LoginPerson>(this, Constants.Navigate
- ViewModelLocator:将请求的ViewModel提供给指定的视图
- LoginView模型:LoginView的视图模型
- MainPageViewModel:MainPageView的视图模型
Messenger.Default.Register<LoginPerson>(this, Constants.NavigateLogin,
person => this.Window.SetContentControl(new MainPage(person)));
MainPageView使用MainPageViewModel。我使用MVVMLight框架的messenger从LoginView导航到MainPageView
Messenger.Default.Register<LoginPerson>(this, Constants.NavigateLogin,
person => this.Window.SetContentControl(new MainPage(person)));
Messenger.Default.Register(这是Constants.NavigateLogin,
person=>this.Window.SetContentControl(新主页(person));
我把loggedin这个人交给视图。MainPage视图将登录的用户设置为其ViewModel(=>MainPageViewModel)
这样对吗?我不这么认为:-)如何在ViewModels之间进行通信?谢谢你的建议
请注意,pro使用MVVM时,您的应用程序是您的ViewModels,而不是视图。您不应该处理任何类型的业务逻辑,例如导航或从视图中传递用户对象。视图只是一个漂亮的层,它允许用户的视图模型轻松地与您的视图模型交互 通常在这种情况下,我使用一个
ShellViewModel
,它包含一个CurrentPage
属性,该属性设置为当前页面的任何ViewModel。我还将在ShellViewModel
中存储一个CurrentUser
属性
ShellViewModel是您的启动对象,启动时,CurrentPage
将是一个LoginViewModel
。当用户成功登录时,LoginViewModel
广播带有CurrentUser
参数的loginsessful
消息,并且ShellViewModel
将拾取该消息并根据消息参数设置CurrentUser
,并将切换到新的MainPageViewModel
例如,查看我的帖子嗨,Rachel,谢谢你的回答和好的博客帖子!你好,亲