我正在使用 Prism 并使用功能区库构建复合 WPF 应用程序。我遇到非常困难的一件事是跨区域命令。
例如,我的功能区位于"功能区区域"中,网格视图位于"主区域"中。假设我希望功能区中的一个按钮弹出一个消息框,其中包含网格视图中当前选定的项目,我该怎么做?
简单的方法是使用 EventAggregator,但我担心如果我有一堆订阅者只是为了点击按钮而连接起来,我只是在询问内存泄漏问题。
有没有办法有一个跨区域命令,以便单击我的"RibbonRegion"中的按钮将在网格视图中获取所选项目并弹出一个具有该值的消息框?
System.Windows.Input.RoutedUICommand
首先,您需要按如下方式声明您的命令:
public static class Commands
{
public static readonly RoutedUICommand TestCommand = new RoutedUICommand("Test Command",
"Test Command", typeof(Commands));
}
然后在功能区 xaml 中:
<my:RibbonButton Command="{x:Static cmd:Commands.TestCommand}" ...
然后在主区域 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
}