2011-05-18 30 views
0

命令我有一个叫主窗口的窗口,有一个工具栏和框架。在框架内显示一个名为HOMEPAGE的页面。此页面显示菜单选项的树状视图。当用户点击一个节点时,使用Border.Content属性在HOMEPAGE的边框内显示相应的表单(页面)。我在工具栏中有一个按钮来搜索客户,我需要将此按钮的command属性绑定到在Customers页面的viewmodel内定义的命令。这个页面是HOMEPAGE的一个孩子,而这个孩子是MAINWINDOW的孩子。你能否建议一种方法来做到这一点,即访问在孩子的孩子对象中定义的命令? 谢谢。绑定到一个子窗口的DataContext的

+0

这将是非常有益的,如果你能告诉复杂的关系,而无需编写与所有大写名称文本过于冗余的墙。例如,您可以使用缩进列表作为层次结构和箭头进行关系。另外或者你可以给一些示例代码来说明你的问题。 – 2011-05-18 20:21:17

+0

他很清楚他的问题。 – 2011-05-18 23:37:36

回答

0

这违背了MVVM的原则。

的ViewModels(和其相应的命令)是1:1至观。每个ViewModel提供一个View和一个View。它有助于将ViewModel视为View的代码隐藏,只是它不能直接访问View(因此它完全与其分离)。

违反这一原则(V至VM == 1:1),的ViewModels之间或视图之间产生依赖性,这是一件坏事。由于每个“模块”都依赖于其他“模块”的实现,因此它使得应用程序难以维护。

你应该做的是暴露在服务于相关查看视图模型另一个命令。反过来,这个命令可能触发你想要的任何事情。

+0

非常感谢您抽出宝贵时间回答。即使你的回答非常清楚,我仍然无法弄清楚如何使SearchCustomer命令绑定到工具按钮,并将结果放入绑定到页面中网格的集合中。我发现即使它只是一种形式,datacontext也不能通过Frame访问:框架充当边界。把这个应用想象成一个MDI父窗体,带有一个工具栏,其中的命令作用于MDI子窗体内的对象上 – Leo 2011-05-19 15:09:50

+0

尝试使用ViewModelLocator搜索。这是一种允许(除其他之外)从任何位置访问任何ViewModel的模式。 – 2011-05-19 15:25:28