让我们举个例子。我有一个绑定到AViewModel的AView。 AView应该在AViewModel上执行ACommand,并传递一个参数。问题是ViewA没有足够的信息传递给命令,因此需要显示另一个BView,以便从用户收集信息。在VIewB关闭后,ViewA在AViewModel上调用ACommand,并将参数传递给它。
如何处理这种情况?我应该允许AView直接与BView通信,或者如果我这样做,我会破坏一些规则吗?
我想的另一种方法是在没有参数的情况下在AViewModel上调用ACommand,然后从VIewModelA发送消息,表明需要信息来完成任务。 MainPageViewModel捕获此信息,而不是发送打开BView的请求,BView绑定到BViewModel。当BView关闭时,BVIewModel发送带有附加信息的消息,并且ViewModelA订阅了这种类型的消息,因此它接收它并完成任务。只是在两个文本框中输入值非常复杂,对吧? :)
答案 0 :(得分:1)
MVVM有三条黄金法则:Separation, Separation & Separation
:)
原因包括:组件的自动化测试,功能的完全分离(例如独立模块),模块的独立团队开发(不会互相绊倒),通常只是更容易找出什么是
回答您的两个视图互连:您正在添加不应存在的依赖项。关注点的分离比一点复杂性更重要(我认为消息传递模型比维护直接互连更简单。)
发布/收听额外消息的复杂性与互连不相关组件的危害相比无关紧要,因此您的上一个建议“更好”,但我实际上建议对整个问题采取更清晰的方法:
基本上我建议将控制器添加到MVVM模式(MVCVM?)。应用程序/模块创建和初始化控制器。控制器订阅事件并提供应用程序的逻辑。
尝试这种模式,看看使用大量的Views,ViewModel和Models是多么简单。 您没有提及您使用的语言或框架,因此我无法针对示例提出具体建议。