WPF with Prism中模块之间的ApplicationCommands问题

时间:2018-12-13 04:07:01

标签: wpf button command prism menuitem

我正在将WPF与Prism一起使用。 我在模块A 中有一个自定义Canavs DrawingCanvas.cs ,在其中将 ApplicationCommands.Delete 设置为以下命令绑定。

this.CommandBindings.Add(newCommandBinding(ApplicationCommands.Delete, Delete_Executed, Delete_Enabled));

我有另一个 B模块,其中有一个 MenuItem 删除,还有另一个 Button 用于删除。我已经设置了来自 xaml 的命令,如下所示。

<MenuItem Header="Delete" x:Name="menuItemDelete" Command="{x:Static ApplicationCommands.Delete}"

<Button x:Name="buttonDelete" Background="Black"   Height="25" Width="25" ToolTip="Delete" Command="{x:Static ApplicationCommands.Delete}"/>

此处用于删除的 MenuItem 可以正常工作。(当从UI中在DrawingCanvas中选择某些图形时,将启用 MenuItem,在DeleteCanes中将调用DrawingCanvas中的“ Delete_Executed”。cs菜单项单击

但是“删除”按钮始终是禁用。从UI在DrawingCanvas中选择某些图形时,不会启用该功能。 我想知道为什么在相同的视图和相同的模块中,相同的命令对MenuItem有效,而对Button不起作用。

有人可以帮助我吗?我做错什么了吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

这里的问题是,ApplicationCommands.Delete的CanExecute始终返回false。有一种解决方法-通过Window的命令绑定:

<Window.CommandBindings>
    <CommandBinding Command="ApplicationCommands.Delete" CanExecute="CommandBinding_CanExecute"/>
</Window.CommandBindings>

事件处理程序看起来像:

private void CommandBinding_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
    e.CanExecute = true;
}

如果您希望一直启用它,或者只是添加条件(如要启用它),就总是可以的。