命令我有一个叫主窗口的窗口,有一个工具栏和框架。在框架内显示一个名为HOMEPAGE的页面。此页面显示菜单选项的树状视图。当用户点击一个节点时,使用Border.Content属性在HOMEPAGE的边框内显示相应的表单(页面)。我在工具栏中有一个按钮来搜索客户,我需要将此按钮的command属性绑定到在Customers页面的viewmodel内定义的命令。这个页面是HOMEPAGE的一个孩子,而这个孩子是MAINWINDOW的孩子。你能否建议一种方法来做到这一点,即访问在孩子的孩子对象中定义的命令? 谢谢。绑定到一个子窗口的DataContext的
回答
这违背了MVVM的原则。
的ViewModels(和其相应的命令)是1:1至观。每个ViewModel提供一个View和一个View。它有助于将ViewModel视为View的代码隐藏,只是它不能直接访问View(因此它完全与其分离)。
违反这一原则(V至VM == 1:1),的ViewModels之间或视图之间产生依赖性,这是一件坏事。由于每个“模块”都依赖于其他“模块”的实现,因此它使得应用程序难以维护。
你应该做的是暴露在服务于相关查看视图模型另一个命令。反过来,这个命令可能触发你想要的任何事情。
非常感谢您抽出宝贵时间回答。即使你的回答非常清楚,我仍然无法弄清楚如何使SearchCustomer命令绑定到工具按钮,并将结果放入绑定到页面中网格的集合中。我发现即使它只是一种形式,datacontext也不能通过Frame访问:框架充当边界。把这个应用想象成一个MDI父窗体,带有一个工具栏,其中的命令作用于MDI子窗体内的对象上 – Leo 2011-05-19 15:09:50
尝试使用ViewModelLocator搜索。这是一种允许(除其他之外)从任何位置访问任何ViewModel的模式。 – 2011-05-19 15:25:28
- 1. 绑定到DataContext的子类
- 2. 一个窗口绑定到自己?
- 3. 将DataContext绑定到一个矩形
- 4. WPF与窗口的RelativeSource绑定需要路径中的“DataContext”?
- 5. WPF绑定:绑定到DataContext的父代
- 6. 如何将Window或其子的DataContext绑定到Window的一个特定属性?
- 7. Silverlight子窗口中的绑定问题
- 8. 绑定子窗口jQuery的事件
- 9. 子窗口中的命令绑定
- 10. 输入绑定CommandParameter绑定到窗口
- 11. 绑定一个ListBoxItem的IsSelected属性到的DataContext的ItemsSource
- 12. 主窗口的DataContext StackOverflowException
- 13. 绑定到另一个控制的DataContext的性质
- 14. Silverlight DataForm,子窗口,组合框,DataContext
- 15. 如何将子窗口绑定到父窗口的相对位置?
- 16. 将数据绑定到Silverlight中的子窗口上的RadGridView
- 17. 将DataContext绑定到ValidationRule
- 18. 将UserControl绑定到NULL DataContext
- 19. DataGridComboBoxColumn绑定到DataGrid DataContext
- 20. 将ViewModel绑定到View DataContext
- 21. 组合框绑定到多个DataContext
- 22. 窗口绑定到文本的标题
- 23. 在GridView中绑定一个usercontrols DataContext
- 24. 几个窗口可以绑定到同一个进程吗?
- 25. DataContext绑定
- 26. 绑定窗口的背景
- 27. 暂停整个窗口的绑定?
- 28. 将窗口绑定到另一个窗口并始终位于顶部
- 29. 从TabControl的DataTemplate绑定到主DataContext
- 30. 绑定到DataContext中的项目数
这将是非常有益的,如果你能告诉复杂的关系,而无需编写与所有大写名称文本过于冗余的墙。例如,您可以使用缩进列表作为层次结构和箭头进行关系。另外或者你可以给一些示例代码来说明你的问题。 – 2011-05-18 20:21:17
他很清楚他的问题。 – 2011-05-18 23:37:36