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

Wpf 如何在usercontrol视图模型中处理来自主窗口的命令,wpf,mvvm,binding,Wpf,Mvvm,Binding,在我的应用程序中,窗口中有几个用户控件。这些用户控件需要相互通信。我的方法如下 用户控件A触发由用户控件B处理的命令 主窗口接收命令并向B发出a命令 用户控件B处理该命令 我的问题是主窗口如何触发可以在用户控件B的视图模型中处理的命令 更新: 已解决:一个gloabl静态继电器命令用于从主窗口到B的通信,一个全局路由命令用于从A到主窗口的通信。感谢您的回复。我认为您希望在B上有一个主窗口可以绑定的依赖属性。然后,B上的DP将接受请求并调用它的视图模型 主窗口不应该知道任何关于控件内部工作的信息。

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

  • 用户控件A触发由用户控件B处理的命令
  • 主窗口接收命令并向B发出a命令
  • 用户控件B处理该命令
  • 我的问题是主窗口如何触发可以在用户控件B的视图模型中处理的命令

    更新:


    已解决:一个gloabl静态继电器命令用于从主窗口到B的通信,一个全局路由命令用于从A到主窗口的通信。感谢您的回复。

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


    主窗口不应该知道任何关于控件内部工作的信息。它应该只知道控件中公开的属性。

    问题没有标记为
    mvvm
    (尚未),但我假设它是因为您提到了ViewModel。首先,让我们同意ViewModels处理命令,而不是控件。如果控件要响应正在执行的命令,请公开控件(视图)可以附加处理程序的适当
    CommandExecuted
    事件

    然而,我不能盲目假设还有另一个未知因素:

    您是否认为用户控件A和B同时存在是理所当然的?如果是,那么一个非常简单且技术含量较低的解决方案将是在某个级别维护对两个ViewModel的引用(可能是
    窗口的ViewModel本身?)以及将命令“冒泡”到那里,在那里将发生对ViewModel B的分派。如果不存在(在这种情况下,控件B可能不存在),那么所需的行为是什么


    根据您目前提供的信息,我建议使用MVVM框架的事件聚合器/中介器模式实现。例如,棱镜有;MVVM灯有;等等。

    谢谢Jon,+1-我已经研究过事件聚合器,但无法使用它,因为我在一个大型应用程序中只做一个模块,而该应用程序没有使用任何框架。是的,A和B同时存在,但是维护引用是某种耦合(虽然实际上不会有什么害处),这与我打算做的是背道而驰的。我将尝试处理事件的视图和调用视图模型,但没有其他简单的方法。问题已解决,一个gloabl静态中继命令用于从主窗口到B的通信,一个全局路由命令用于从A到主窗口的通信。无法尝试此操作,但解决方法不同:一个gloabl静态中继命令用于从主窗口到B的通信,一个全局路由命令用于从A到主窗口的通信。