我正在将WPF与Prism一起使用。
我在模块A 中有一个自定义Canavs DrawingCanvas.cs ,在其中我已将 ApplicationCommands设置为。将删除为命令绑定(bind),如下所示。
this.CommandBindings.Add(newCommandBinding(ApplicationCommands.Delete, Delete_Executed, Delete_Enabled));
我还有另一个模块B ,其中我有一个 MenuItem 删除,还有另一个按钮用于删除。我已经从 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}"/>

在这里,用于Delete的 MenuItem 可以正常工作。(当从UI中在DrawingCanvas中选择某些图形时,将启用 MenuItem;在DeleteCancel中单击“”时,将调用DrawingCanvas.cs中的“Delete_Executed”。)

但是Delete按钮始终是禁用。从UI在DrawingCanvas中选择了某些图形时,不会启用该功能。
我想知道为什么在相同的 View 和相同的模块中,相同的命令适用于MenuItem但不适用于Button。

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

提前致谢。

最佳答案

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

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

事件处理程序如下所示:
private void CommandBinding_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
    e.CanExecute = true;
}

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

关于wpf - WPF with Prism中模块之间的ApplicationCommands问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53754886/

10-13 06:06