2010-09-25 80 views
2

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

在MVVM世界中这样做的首选方式是什么?为什么?

我看到很多选项,其中之一就是继续按照之前的方式进行操作,因为这是一次性操作,不会干扰其他“MVVM-ness”应用。一旦用户登录,我可以用他们的凭据初始化MainWindow的ModelView,然后继续我的方式。另一种选择是让ModelView导致登录对话框(以某种方式)显示。 MVVM大师更喜欢这些吗?

(还有一个选项,它首先显示登录对话框,然后当它被解散时,创建主窗口。这在技术上解决了我的困境,但它并不真正教育我,也不就像有一个“裸体”登录对话框的美学)

+0

我的答案在http://stackoverflow.com/questions/3791677/mvvm-foundation-how-to-close-application-window-from-viewmodel/3793937#3793937可能会有所帮助。 – 2010-09-25 22:12:45

回答

2

Model-View-ViewModel Pattern没有告诉我们如何定义UI工作流。我们可以自由选择合适的工作流程。我更喜欢你的第一种方法,因为它实现简单而直接。工作流程:

  1. 显示空的主窗口
  2. 显示登录对话框
  3. 初始化主窗口与用户凭据

将是一个控制器(例如ApplicationController中)的责任。这可能如何看起来如ViewModelWPF Application Framework (WAF)的示例应用程序中所示。

0

我认为最好的(清洁,可测试...)选项应该是ViewModels启动对话框显示,因为逻辑应该属于VM而不是视图...这个'show-up'通常通过创建类似于DialogService的应用来实现 - 为您的模式窗口创建一个抽象(例如通过创建一个具有类似方法的接口ShowDialog()和一个属性DialogResult,也许更多 - 这取决于你的具体需求),你的对话实现;然后创建对抽象对话框有依赖性的DialogService,并在此服务中调用ShowDialog,检查DialogResult的值等;在你的虚拟机中,你只会使用这个对话服务,而没有参考一些与视图有关的东西......我不会详细讨论,因为在虚拟机中显示/使用模态对话框时有一些实现,基于这个(和更多)...选择这种方法也可以让你的UI框架平台独立。 HTH。