我有一个“login”;使用MVVM模式编写的表单。
这个表单有一个ViewModel,其中包含用户名和密码,它们使用普通的数据绑定绑定到XAML中的视图。 它还有一个&;Login"命令,该命令绑定到&;login &;按钮上的表单,agan使用正常的数据绑定当&;Login"当命令触发时,它会调用ViewModel中的一个函数,该函数会触发并通过网络发送数据来登录。当这个函数完成时,有2个动作:
登录无效-我们只是显示一个消息框,一切正常
DialogResult
…
问题是,ViewModel对实际的视图一无所知,所以它如何关闭视图并告诉它返回一个特定的dialgresult ??我可以在代码背后粘贴一些代码,和/或通过视图模型传递视图,但这似乎会击败整个点MVVM完全…
最后我只是违背了“纯洁”。MVVM模式,并让视图发布Closed
事件,并公开Close
方法。然后ViewModel将调用view.Close
。视图仅通过接口了解,并通过IOC容器连接,因此不会损失可测试性或可维护性。
公认的答案是-5票,这似乎相当愚蠢!虽然我很清楚“纯粹”解决问题所带来的良好感觉,但我肯定不是唯一一个认为200行事件、命令和行为只是为了避免以“模式”为名的一行方法的人。和“;purity"是不是有点可笑....