【问题标题】:Set the DataContext of a ViewModel in MVVMLight在 MVVMLight 中设置 ViewModel 的 DataContext
【发布时间】:2011-09-27 15:01:08
【问题描述】:

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

我的场景:

  • ViewModelLocator :将请求的 ViewModel 提供给指定的视图。
  • Lo​​ginViewModel: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 (=> MainPageViewModel)。

这种方式正确吗?我不这么认为 :-) 如何在 ViewModel 之间进行通信?感谢您的建议。

问候,亲

【问题讨论】:

    标签: c# mvvm mvvm-light


    【解决方案1】:

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

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

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

    例如,查看我的帖子here

    【讨论】:

    • 嗨,瑞秋,感谢您的回答和精彩的博文!问候,亲
    猜你喜欢
    • 2010-11-05
    • 2017-04-04
    • 2015-08-21
    • 1970-01-01
    • 2015-04-15
    • 2011-06-03
    • 2012-11-24
    • 1970-01-01
    • 2015-07-08
    相关资源
    最近更新 更多