【问题标题】:Binding a command to a child window's datacontext将命令绑定到子窗口的数据上下文
【发布时间】:2011-08-28 08:18:25
【问题描述】:

我有一个名为 MAINWINDOW 的窗口,它有一个工具栏和一个框架。在框架内显示一个名为 HOMEPAGE 的页面。此页面有一个树形视图,其中显示了菜单选项。当用户单击一个节点时,相应的表单(页面)会显示在 HOMEPAGE 的边框内,使用 Border.Content 属性。我在工具栏中有一个按钮来搜索客户,我需要将此按钮的命令属性绑定到在客户页面的视图模型中定义的命令。此页面是 HOMEPAGE 的子页面,而 HOMEPAGE 又是 MAINWINDOW 的子页面。您能否提出一种方法来执行此操作,即访问在孩子的子对象中定义的命令? 谢谢。

【问题讨论】:

  • 如果您可以显示复杂的关系而不用全大写名称编写过度冗余的文本墙,那将非常有帮助。例如,您可以对层次结构使用缩进列表,对关系使用箭头。或者或另外,您可以提供一些示例代码来说明您的问题。
  • 他的问题很清楚..

标签: wpf mvvm binding command


【解决方案1】:

这违背了 MVVM 的原则。

ViewModel(及其相应的命令)与 View 的比例是 1:1。每个 ViewModel 提供一个 View,并且只提供一个 View。将 ViewModel 视为 View 的 codeBehind 会有所帮助,只是它永远不能直接访问 View(因此它与它完全解耦)。

违反这个原则(V to VM == 1:1),会在 ViewModel 之间或 View 之间创建依赖关系,这是一件坏事。它使您的应用程序更难维护,因为每个“模块”都依赖于其他“模块”的实现。

您应该做的是在提供相关视图的视图模型上公开另一个命令。该命令反过来可以触发您想要的任何东西。

【讨论】:

  • 非常感谢您抽出宝贵的时间来回答。即使您的答案很清楚,我仍然无法弄清楚如何将 SearchCustomer 命令绑定到工具按钮,将结果放入绑定到页面中网格的集合中。我发现即使它只是一种形式,也无法通过框架访问数据上下文:框架充当边界。将这个应用程序想象成一个 MDI 父窗体,其工具栏带有作用于 MDI 子窗体内的对象的命令
  • 尝试谷歌搜索 ViewModelLocator。这是一种允许(除其他外)从任何位置访问任何 ViewModel 的模式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多