我正在将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/