如何解决MVVM在视图模型之间传递值
| 我尝试处理将值从一个ViewModel传递到另一个ViewModel的问题。这是一个例子。 我们有父视图及其对应的ViewModel,在该视图中,我们选择了项,然后要创建新的子视图(以编辑选择的详细信息),以在XAML中实例化其ViewModel。 当我需要将值传递给Child ViewModel构造函数时,就会发生问题(这是必须从数据库中获取的数据的ID)。我假设Parent \的ViewModel必须与Child \的ViewModel进行通信-但无法完成,因为在XAML中Child \'s的ViewModel直到Child \'s的ViewModel才被实例化,因此无法实例化,因此我们无法使用Messenger(MVVM Light工具包),只是从Parent \ ModelView传播该信息,因为Child \ ModelView尚未订阅(注册该类型的消息)。 我不想破坏MVVM模式,也无法为此找到任何好的解决方案。感谢您所能提供的所有帮助。解决方法
MVVM模式的主要租户之一是,您应该能够在没有View的情况下执行ViewModel代码,以便对View逻辑进行单元测试。换句话说,理想情况下,您应该能够以“无头”模式执行应用程序。
在您的示例中,您声明ParentView创建了一个ChildView,而后者又创建了一个ChildViewModel(您正在努力连接起来)。可以在无头模式下工作吗?在我看来,您是依靠View来执行此父子导航。
如果以另一种方式翻转它,让ParentViewModel创建ChildViewModel,则ViewModels之间的通信不再有问题。 ParentView需要“监视”(即属性更改)以创建新的ChildViewModel,并相应地构造ChildView。
更详细地:
ParentView实例化ParentVM
用户进行交互以使需要孩子
ParentVM创建一个ChildVM,通过ChildVM属性将其公开
ParentView处理所得的PropertyChanged事件,创建一个ChildView,并将其DataContext设置为ChildVM。
, 如果使用任何框架怎么办?我的意思是MvvmLight,Caliburn Micro或Prism。每个框架都有一个消息传递基础结构。您可以利用发布/订阅方法来利用它们来回传递状态。例如,看一下棱镜。有几个快速入门可以显示事件模型。您还可以维护视图控制器以协调视图之间的通信。
看看Ward Bell的Prism Explorer示例应用程序。这是\ '09的文章,但今天仍然有用。尤其要了解他如何将实体对象从列表视图传递到子详细视图。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。