Wpf 棱柱体和功能区:使用命令交叉区域

Wpf 棱柱体和功能区:使用命令交叉区域,wpf,prism,ribboncontrolslibrary,Wpf,Prism,Ribboncontrolslibrary,我正在使用Prism和Ribbon库构建一个复合WPF应用程序。有一件事我很难处理,那就是跨区域指挥 例如,我在“RibbonRegion”中有功能区,在“MainRegion”中有栅格视图。假设我希望功能区中的一个按钮弹出一个消息框,其中包含网格视图中当前选定的项目,我如何做到这一点 简单的方法是使用EventAggregator,但我担心如果我有一堆订阅者只是为了点击按钮而连接起来,那么我只是在问内存泄漏问题 是否有一种方法可以使用跨区域命令,以便单击我的“RibbonRegion”中的按钮

我正在使用Prism和Ribbon库构建一个复合WPF应用程序。有一件事我很难处理,那就是跨区域指挥

例如,我在“RibbonRegion”中有功能区,在“MainRegion”中有栅格视图。假设我希望功能区中的一个按钮弹出一个消息框,其中包含网格视图中当前选定的项目,我如何做到这一点

简单的方法是使用EventAggregator,但我担心如果我有一堆订阅者只是为了点击按钮而连接起来,那么我只是在问内存泄漏问题


是否有一种方法可以使用跨区域命令,以便单击我的“RibbonRegion”中的按钮将在网格视图中获得所选项目,并弹出一个具有该值的消息框?

您可以使用
System.Windows.Input.RoutedUICommand

首先,您需要声明您的命令,如下所示:

public static class Commands
{
    public static readonly RoutedUICommand TestCommand = new RoutedUICommand("Test Command",
        "Test Command", typeof(Commands));
}
然后在RibbonRegion xaml中:

<my:RibbonButton Command="{x:Static cmd:Commands.TestCommand}" ...
<UserControl.CommandBindings>
    <CommandBinding CanExecute="OnTestCanExecute"
                    Command="{x:Static cmd:Commands.TestCommand}"
                    Executed="OnTestExecute" />
</UserControl.CommandBindings>

您可以使用
System.Windows.Input.RoutedUICommand

首先,您需要声明您的命令,如下所示:

public static class Commands
{
    public static readonly RoutedUICommand TestCommand = new RoutedUICommand("Test Command",
        "Test Command", typeof(Commands));
}
然后在RibbonRegion xaml中:

<my:RibbonButton Command="{x:Static cmd:Commands.TestCommand}" ...
<UserControl.CommandBindings>
    <CommandBinding CanExecute="OnTestCanExecute"
                    Command="{x:Static cmd:Commands.TestCommand}"
                    Executed="OnTestExecute" />
</UserControl.CommandBindings>

我可以看出这是怎么回事,但它不起作用。MainRegion.xaml命令绑定不与RibbonRegion命令通信。我的意思是,MainRegion.xaml.cs“OnTestExecute”从未从RibbonRegion的角度进行评估,因此RibbonButton始终处于禁用状态。@TrialAndError:您找到了更好的解决方案吗?如果是这样,请通过回答您的问题让我们知道:)我可以看到这是怎么回事,但它不起作用。MainRegion.xaml命令绑定不与RibbonRegion命令通信。我的意思是,MainRegion.xaml.cs“OnTestExecute”从未从RibbonRegion的角度进行评估,因此RibbonButton始终处于禁用状态。@TrialAndError:您找到了更好的解决方案吗?如果是,请通过回答您的问题让我们知道:)