Я пытаюсь реализовать высокочувствительный пользовательский интерфейс для моего приложения MVVM, поэтому я решил, что все обработчики команд будут автоматически выполняться в BackgroundWorker
, чтобы они не блокировали пользовательский интерфейс.
Но в то же время я не хочу, чтобы пользователь мог выполнять ту же команду, пока она выполняется в фоновом режиме. Решение кажется очевидным:
- При вызове обработчика
Executed
обработчик CanExecute
возвращает false
- Запустить
BackgroundWorker
асинхронный
- Когда
BackgroundWorker
завершится, обработчик CanExecute
снова вернет true
.
Проблема в том, что мне нужно уведомить WPF после шага 1 и еще раз после шага 3, что CanExecute
изменился и что это необходимо. Я знаю, что могу сделать это, вызвав CommandManager.InvalidateRequerySuggested
, но это также вызывает запрос CanExecute
обработчиков всех других команд. Имея много команд, это не хорошо.
Есть ли способ запросить конкретную команду, т. Е. Ту, которая выполняется в данный момент?
ТИА