MVVM和登录窗口

MVVM和登录窗口,mvvm,Mvvm,我正在编写我的第一个“真正的”MVVM应用程序,用户需要采取的第一步是提供登录凭据。在过去,我会在主窗口布局好并第一次可见后显示登录对话框 在MVVM世界中,做这件事的首选方式是什么,为什么 我看到了很多选择,其中之一就是继续像以前那样做,因为这是一次性的步骤,不会干扰应用程序的其余“MVVM特性”。用户登录后,我可以使用他们的凭据初始化main窗口的ModelView,然后继续我的操作。另一个选项是让ModelView(以某种方式)显示登录对话框。MVVM大师们更喜欢这两个吗 (还有另外一个选

我正在编写我的第一个“真正的”MVVM应用程序,用户需要采取的第一步是提供登录凭据。在过去,我会在主窗口布局好并第一次可见后显示登录对话框

在MVVM世界中,做这件事的首选方式是什么,为什么

我看到了很多选择,其中之一就是继续像以前那样做,因为这是一次性的步骤,不会干扰应用程序的其余“MVVM特性”。用户登录后,我可以使用他们的凭据初始化
main窗口的ModelView,然后继续我的操作。另一个选项是让ModelView(以某种方式)显示登录对话框。MVVM大师们更喜欢这两个吗

(还有另外一个选项,首先显示登录对话框,然后当它被取消时,创建主窗口。这在技术上解决了我的难题,但它不会真正教育我,我也不喜欢“裸体”登录对话框的美学。)

我认为最好(更干净,可测试…)选项是ViewModels启动对话框显示,因为逻辑应该属于VM,而不是视图……这种“显示”通常是通过创建类似DialogService的东西来实现的,DialogService应该只处理以下事项: 为对话框实现的模态窗口创建一个抽象(例如,通过创建一个接口,该接口具有ShowDialog()等方法和属性DialogResult,或者更多,这取决于您的具体需要);然后创建依赖于对话框抽象的DialogService,在该服务中可以调用ShowDialog,检查DialogResult的值等;在你的虚拟机中,你只会使用这个对话框服务,而不会参考一些与视图相关的东西……我不会深入讨论细节,因为有一些实现是基于这个(以及更多)来显示/使用来自你虚拟机的模态对话框的。选择这种方法还可以获得UI框架平台独立性。
HTH.

模型视图模型模式没有告诉我们如何定义UI工作流。我们可以自行选择合适的工作流程。我更喜欢您的第一种方法,因为它简单且易于实现。工作流程:

  • 显示空的主窗口
  • 显示登录对话框
  • 使用用户凭据初始化主窗口
  • 将由控制器负责(例如应用程序控制器)。在

    ViewModel示例应用程序中显示了这种情况,我的回答可能会有所帮助。