gpt4 book ai didi

silverlight - MVVM 在 View 模型之间传递值

转载 作者:行者123 更新时间:2023-12-03 10:07:47 25 4
gpt4 key购买 nike

我尝试处理将值从一个 ViewModel 传递到另一个的问题。这是一个例子。

我们有父 View 及其对应的 View 模型,在该 View 中我们选择项目,然后我们想要创建新的 subview (以编辑选择的详细信息),它在 XAML 中实例化其 View 模型。
当我需要将值传递给 Child ViewModel 构造函数时出现问题(它是必须从数据库中获取的数据的 Id)。我假设 Parent 的 ViewModel 必须与 Child 的 ViewModel 进行通信 - 但它无法完成,因为 Child 的 ViewModel 在 Child 的 View 在 XAML 中执行此操作之前不会实例化,因此我们不能使用 Messenger(MVVM Light Toolkit)并且仅从 Parent 的 ModelView 传播该信息,因为 Child 的ModelView 无法订阅(注册到该类型的消息)。

我不想打破 MVVM 模式,也找不到任何好的解决方案。我很感激我能得到的所有帮助。

最佳答案

MVVM 模式的主要租户之一是您应该能够在没有 View 的情况下执行您的 ViewModel 代码,以便对您的 View 逻辑进行单元测试。换句话说,理想情况下,您应该能够以“ headless ”模式执行您的应用程序。

在您的示例中,您声明 ParentView 创建了一个 ChildView ,而后者又创建了一个 ChildViewModel (您正在努力连接)。这可以在 headless 模式下工作吗?在我看来,您依赖于您的 View 来执行此父子导航。

如果反过来,让 ParentViewModel 创建 ChildViewModel,则 ViewModel 之间的通信不再有问题。 ParentView 需要“监视”(即属性更改)以创建新的 ChildViewModel,并相应地构造 ChildView。

更详细地:

  • ParentView 实例化 ParentVM
  • 用户以需要 child 的方式进行交互
  • ParentVM 创建一个 ChildVM,通过 ChildVM 属性公开它
  • ParentView 处理产生的 PropertyChanged 事件,创建一个 ChildView,将它的 DataContext 设置为 ChildVM。
  • 关于silverlight - MVVM 在 View 模型之间传递值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6392854/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com