我正在尝试为我的 MVVM 应用程序实现一个高度响应的 UI,所以我选择让所有命令处理程序在 BackgroundWorker 中自动执行,这样它们就不会阻塞 UI。

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

  • 当调用 Executed 处理程序时,让 CanExecute 处理程序返回 false
  • 启动 BackgroundWorker 异步
  • BackgroundWorker 完成时,让 CanExecute 处理程序再次返回 true

  • 问题是,我需要在第 1 步之后和第 3 步之后再次通知 WPF CanExecute 已更改并且应该需要它。我知道我可以通过调用 CommandManager.InvalidateRequerySuggested 来做到这一点,但这会导致所有其他命令的 CanExecute 处理程序也被重新查询。有很多命令,那不好。

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

    TIA

    最佳答案

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

    关于wpf - 是否可以让 CommandManager 仅重新查询特定的 WPF 命令而不是全部?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2498999/

    10-17 01:22