在我的应用程序中使用菜单中的CanExecute
参数时,我面临着两难境地。CommandBinding
情况如下:应用程序本身可以在某些模式下运行,例如工作模式、审查模式等。根据模式,一些菜单项应该启用或不启用(因此,应该可以执行或不执行)。
到目前为止我所做的是为 CanExecute 创建 4 个事件处理程序:
private void Mode1CanExecute(object sender, CanExecuteRoutedEventArgs e);
private void Mode1CannotExecute(object sender, CanExecuteRoutedEventArgs e);
private void Mode2CanExecute(object sender, CanExecuteRoutedEventArgs e);
private void Mode2CannotExecute(object sender, CanExecuteRoutedEventArgs e);
由于某些菜单命令对两种模式都是通用的,因此某些菜单命令是每种模式独有的。
随着应用程序的发展,有更多的因素决定此时是否应该执行特定的菜单命令。我能想到的解决方案是:
- 向事件处理程序添加布尔多绑定
CanExecute
,但我找不到此解决方案的任何示例,我相信这是不可能的。 - 为更长的名称添加更多的事件处理程序,
CanExecute
实际上会使代码的可读性降低 - 具有“每个菜单项”
CanExecute
事件处理程序,并将每个事件处理程序的代码基于一些布尔变量来确定它的结果
我知道启用菜单项可以在SubmenuOpened
事件处理程序中完成,但是对于许多命令也有一个KeyGesture
定义。
我的问题是:在这种情况下,最佳实践是什么,因此应用程序的逻辑(命令执行可用性)得到保证,但代码可读性也保持在合理水平?
感谢您的任何建议。