在我的 WPF UI 中,我使用通过以下代码在 xaml 中引用的 RoutedCommands:
Command="viewModel:MessageListViewModel.DeleteMessagesCommand"
我不喜欢这个到我的 ViewModel 类的静态链接,我认为这不如创建自定义 ICommand 实现并使用如下所示的语法那么好
Command="{Binding DeleteMessagesCommand}"
创建一个后,我注意到我所做的一个主要缺点:RoatedCommands 利用 CommandManager 并(以某种对我来说完全不透明的方式)触发 CommandManager.RequerySuggested 事件,以便自动重新查询它们的 CanExecute 方法。至于我的自定义实现,CanExecute 仅在启动时触发一次,此后不再触发。
有人对此有一个优雅的解决方案吗?
只需实施CanExecuteChanged
事件如下:
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
当您将命令分配给控件时,它会订阅CanExecuteChanged
事件。如果您将其“重定向”到CommandManager.RequerySuggested
事件,无论何时都会通知控件CommandManager.RequerySuggested
被触发。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)