26
ViewModel应该如何关闭表单?
我正在尝试学习WPF和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行事件,命令和行为只是为了避免使用一种方法的人。 “模式”和“纯度”的名称有点荒谬。