如何在usercontrol视图模型中处理来自主窗口的命令

时间:2011-03-17 13:06:44

标签: wpf mvvm binding

在我的应用程序中,我在一个窗口中有几个用户控件。这些用户控件需要相互通信。我的方法如下

  1. 用户控制触发由用户控件B处理的命令。
  2. 主窗口接收命令并向B
  3. 发出命令
  4. 用户控件B处理命令。
  5. 我的问题是主窗口如何触发可以在用户控件B的VIEW MODEL中处理的命令?

    更新

    已解决:一个gloabl静态RelayCommand用于从MainWindow到B的通信,以及一个Global RoutedCommand用于从A到主窗口的通信。感谢您的回复。

2 个答案:

答案 0 :(得分:1)

我认为你想要在主窗口可以绑定的B上有一个依赖属性。然后,您在B上的DP将接收请求并调用它的视图模型。

主窗口不应该知道控件的内部工作原理。它应该只知道控件的暴露属性。

答案 1 :(得分:1)

这个问题没有被标记为mvvm(但是),但是我假设它是因为你提到了一个ViewModel。首先,让我们同意ViewModels处理命令而不是控件。如果控件想要响应正在执行的命令,则公开控件(View)可以附加处理程序的合适CommandExecuted事件。

然而,另一个未知的我不能盲目地假设:

您是否认为用户控制A和B同时存在是理所当然的?如果是,那么一个非常简单和低技术的解决方案是在某个级别维护对ViewModel的引用(也许是Window本身的ViewModel?)并将命令“冒泡”到那里,在那里发送将发生ViewModel B.如果不是(在这种情况下控制B可能不存在),所需的行为是什么?

根据您目前提供的信息,我建议您使用MVVM框架的Event Aggregator / Mediator模式实现。例如,Prism有EventAggregator; MVVM Light有Messenger;等