Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在MVVMLight中设置ViewModel的DataContext_C#_Mvvm_Mvvm Light - Fatal编程技术网

C# 在MVVMLight中设置ViewModel的DataContext

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

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

我的设想:

  • ViewModelLocator:将请求的ViewModel提供给指定的视图
  • LoginView模型:LoginView的视图模型
  • MainPageViewModel:MainPageView的视图模型
我的示例应用程序。很简单:用户可以登录并进入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,谢谢你的回答和好的博客帖子!你好,亲