gpt4 book ai didi

wpf - ViewModel 到 ViewModel 的通信

转载 作者:行者123 更新时间:2023-12-03 10:48:39 31 4
gpt4 key购买 nike

我正在研究由以下部分组成的应用程序区域:

  • Explorer - 包含 TreeView
  • PropertyInspector - 包含一个 PropertyGrid
  • 编辑器 - 包含一个 Explorer 和一个 PropertyInspector

  • 如您所见,这些部分以分层方式组织。我的问题是:
    如何使资源管理器使用的 TreeView 中的选定项目成为属性检查器使用的属性网格的选定对象?

    当 TreeView 引发 SelectedItemChanged 事件时,会向 ExplorerViewModel 发送一条命令。 PropertyGrids SelectedObject 绑定(bind)到 PropertyInspectorViewModel 上的属性。如何连接两个 View 模型?一种方法可能是让 EditorViewModel 将 PropertyInspectorViewModel 上的方法附加到 ExplorerViewModel 在收到命令时引发的事件,但这是要走的路还是可以通过数据绑定(bind)以某种方式解决?

    编辑器不直接使用 TreeView 和属性网格的原因是因为资源管理器和属性检查器,连同所有撤消/重做功能、验证代码等,旨在在其他领域重用。

    最佳答案

    我强烈推荐使用 MVVM 框架。我有类似的要求,决定采用Tony Sneed's Simple MVVM Toolkit .它非常轻量级,文档齐全且易于理解,提供了非常有用的功能,并且基本上为您完成了 MVVM 管道的必备功能。

    在这种情况下,您需要使用消息总线功能:

    " 消息总线

    有时您需要在应用程序的 View 模型之间传递消息。一个很好的例子是当您想要基于某些业务逻辑导航到特定 View 时。直接从另一个 View 模型引用主视图模型不是一个好主意。这样做会在难以维护的 View 模型之间产生相互依赖关系(这种现象称为意大利面条代码)。这就是消息总线(也称为事件调解器或聚合器)派上用场的地方。例如,CustomerViewModel 然后可以使用特定 token 将消息发送到消息总线,并且 MainPageViewModel 可以订阅以接收消息,只要有人将具有相同 token 的消息发送到消息总线。消息标记只是可以定义为类中的常量的字符串。” From the Programming Reference page

    除此之外,我还使用了Josh Smith's RelayCommand 简化 ICommand @eran otzap 建议的通知

    关于wpf - ViewModel 到 ViewModel 的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15887484/

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