棱镜和色带:用命令交叉区域

时间:2012-08-15 14:06:26

标签: wpf prism ribboncontrolslibrary

我正在使用Prism构建复合WPF应用程序并使用功能区库。我遇到非常困难的一件事是使用区域交叉命令。

例如,我的'RibbonRegion'中有我的功能区,我的'MainRegion'中有一个网格视图。假设我想在我的功能区中有一个按钮,弹出一个带有网格视图中当前所选项目的消息框,我该怎么做?

简单的方法是使用EventAggregator,但我担心如果我有一堆订阅者只是为了按钮点击,我只是要求内存泄漏问题。

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

1 个答案:

答案 0 :(得分:1)

您可以使用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}" ...

然后在你的MainRegion xaml:

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

然后在你的xaml.cs:

public void OnTestRouteCanExecute(object sender, System.Windows.Input.CanExecuteRoutedEventArgs e)
    {
        e.CanExecute = true;
    }

    public void OnTestRouteExecute(object sender, System.Windows.Input.ExecutedRoutedEventArgs e)
    {
        // do some stuff here
    }