我正在尝试学习 WPF 和 MVVM 问题,但遇到了障碍。这个问题与这个问题相似但不完全相同(handling-dialogs-in-wpf-with-mvvm) ......
我有一个使用 MVVM 模式编写的“登录”表单。
此表单有一个 ViewModel,其中包含用户名和密码,它们使用普通数据绑定绑定到 XAML 中的视图。它还有一个“登录”命令,该命令绑定到表单上的“登录”按钮,同样使用普通数据绑定。
当“Login”命令触发时,它会调用 ViewModel 中的一个函数,该函数会关闭并通过网络发送数据以进行登录。此函数完成后,有 2 个操作:
登录无效 - 我们只显示一个 MessageBox,一切都很好
登录是有效的,我们需要关闭登录表单并让它返回 true 作为它的
DialogResult
...
问题是,ViewModel 对实际视图一无所知,那么它如何关闭视图并告诉它返回特定的 DialogResult?我可以在 CodeBehind 中粘贴一些代码,和/或将 View 传递给 ViewModel,但这似乎会完全破坏 MVVM 的全部意义......
更新
最后,我只是违反了 MVVM 模式的“纯粹性”,让 View 发布了一个Closed
事件,并公开了一个Close
方法。然后 ViewModel 将调用view.Close
. 视图只能通过接口知道并通过 IOC 容器连接,因此不会丢失可测试性或可维护性。
接受的答案是-5票似乎很愚蠢!虽然我很清楚一个人在“纯洁”的同时解决问题所获得的良好感觉,当然我不是唯一一个认为 200 行事件、命令和行为只是为了避免单行方法的人“模式”和“纯度”的名称有点可笑....