是否可以让CommandManager重新查询特定的WPF命令而不是全部?

aov*_*ven 3 wpf user-interface routed-commands mvvm

我正在尝试为我的MVVM应用程序实现高度响应的UI,因此我选择让所有命令处理程序自动执行,BackgroundWorker以便它们不会阻止UI.

但与此同时,我不希望用户在后台执行时仍能执行相同的命令.解决方案似乎很明显:

  1. Executed调用处理程序,有CanExecute处理程序返回false
  2. 启动BackgroundWorker异步
  3. BackgroundWorker完成后,有CanExecute处理程序返回true一次.

问题是,我需要在步骤1之后通知WPF,然后在步骤3之后再次通知WPF CanExecute,并且应该是必需的.我知道我可以通过调用来完成它CommandManager.InvalidateRequerySuggested,但这会导致CanExecute所有其他命令的处理程序被重新查询.有很多命令,这不好.

有没有办法要求重新查询特定命令 - 即当前正在执行的命令?

TIA

geh*_*hho 6

我认为你只需要为这两种情况引发ICommand.CanExecuteChanged事件,并且相应的控件应该更新其IsEnabled状态.