视图模型应该如何关闭表单?
我正在努力学习WPF和MVVM问题,但遇到了一个障碍。这个问题很相似,但不完全一样。作为这个(处理-对话-在-wpf-与-mvvm)...
我有一个使用MVVM模式编写的“Login”表单。
此表单具有一个ViewModel,它保存用户名和密码,这些用户名和密码使用常规数据绑定到XAML中的视图。它还有一个“Login”命令,它绑定到表单上的“Login”按钮,使用普通的数据绑定。
当“Login”命令触发时,它将调用ViewModel中的一个函数,该函数将通过网络发送数据以登录。当此函数完成时,有两个操作:
登录是无效的-我们只是显示一个MessageBox,一切都很好
登录是有效的,我们需要关闭Login表单并让它返回true作为它的DialogResult
...
问题是,ViewModel对实际视图一无所知,那么它如何关闭视图并告诉它返回特定的DialogResult呢?我可以在CodeBeback中添加一些代码,并/或将视图传递到ViewModel,但这似乎会完全击败MVVM的全部要点.
更新
最后,我违反了MVVM模式的“纯度”,并让View发布了一个Closed
事件,并公开Close
方法。然后,ViewModel只需调用view.Close
..视图仅通过接口已知,并通过IoC容器连接起来,因此不会丢失可测试性或可维护性。
这似乎相当愚蠢,被接受的答案是-5票!虽然我很清楚一个人在“纯粹”的情况下解决一个问题所得到的美好感觉,但我并不是唯一一个认为200行事件、命令和行为只是为了避免以“模式”和“纯洁”为名的单行方法的人是有点可笑的。