我在用棱镜
CompositeCommand
在一个
ApplicationCommands.cs
班级:
public CompositeCommand ShowSourceFormattingCommand { get; } = new CompositeCommand(true);
我有一个
DelegateCommand<bool?>
注册于此
复合命令
以下内容:
public DelegateCommand<bool?> ShowSourceFormattingCommand { get; }
...
Services.ApplicationCommands.ShowSourceFormattingCommand.
RegisterCommand(ShowSourceFormattingCommand);
然后它与命令处理程序关联:
ShowSourceFormattingCommand =
new DelegateCommand<bool?>(changeDisplayCommandsHandler.OnShowSourceFormattingSelect).
ObservesCanExecute(() => IsActive);
...
public void OnShowSourceFormattingSelect(bool? selected)
{
Services.EventService.GetEvent<ShowSourceFormattingEvent>().Publish(selected ?? false);
}
它是绑定到
ToggleButton
在用户界面中运行良好。但是,当我尝试将键盘快捷键与之关联时,它不起作用(使用指定的键)。
<KeyBinding Modifiers="Ctrl+Shift" Key="S"
Command="{Binding ShowSourceFormattingCommand}" />
这是因为bool参数没有值,所以为空。如果在用户界面中打开了该选项,则键盘快捷键会将其切换为关闭,但不会重新打开。请注意
ComandParameter
的
KeyBinding
类不会传递给相关联的命令,但如果是,它也不会有帮助,因为我需要它在true和false之间交替。
<KeyBinding Modifiers="Ctrl+Shift" Key="S" Command="{Binding ShowSourceFormattingCommand}"
CommandParameter="True" />
因此,我尝试执行
CommandReference
对象,如
How do I associate a keypress with a DelegateCommand in Composite WPF?
,但它给出的结果相同,可为空的bool参数始终为空。
然后我尝试执行另一个命令
键绑定
,这将切换值:
public CompositeCommand ShowSourceFormattingKeyboardCommand { get; } =
new CompositeCommand(true);
...
public DelegateCommand ShowSourceFormattingKeyboardCommand { get; }
...
Services.ApplicationCommands.ShowSourceFormattingKeyboardCommand.
RegisterCommand(ShowSourceFormattingKeyboardCommand);
...
ShowSourceFormattingKeyboardCommand =
new DelegateCommand(changeDisplayCommandsHandler.OnToggleShowSourceFormattingCommand).
ObservesCanExecute(() => IsActive);
...
private bool _isSourceFormattingShown = false;
public void OnToggleShowSourceFormattingCommand()
{
_isSourceFormattingShown = !_isSourceFormattingShown;
OnShowSourceFormattingSelect(_isSourceFormattingShown);
}
这样可以正常工作并正确地打开和关闭该功能,但在使用键盘快捷键时,按钮的状态没有任何指示。所有这些方法都是一样的。我的问题是
这些可为空的bool命令应该如何连接到
切换按钮
要正确更新按钮的视觉状态,例如打开和关闭按钮?