Когда WPF запрашивает команды, могут ли они выполняться? Отладчик сообщает, что это происходит довольно часто. Но каков точный набор условий?
Когда WPF решает запросить команды, могут ли они выполняться?
Ответы (1)
Версия TL; DR заключается в том, что методы CanExecute вызываются, когда в окне происходят определенные события ввода. В основном это события клавиатуры и мыши.
Таким образом, каждый раз, когда кто-то щелкает или нажимает клавишу, ВСЕ команды становятся недействительными с помощью CommandManager (путем создания файла CommandManager.RequerySuggested). Вот почему так важно поддерживать скорость методов CanExecute.
Также можно справиться с этим самостоятельно, создав пользовательскую реализацию ICommand
, которая не использует CommandManager для события CanExecuteChanged
.
person
Troels Larsen
schedule
30.03.2015
RelayCommand
обычно запрашиваетCanExecuteChanged()
в любое время при изменении любого свойства (я думаю, запустив CommandManager.InvalidateRequerySuggested каждый раз, когда изменяется свойство), в то время какDelegateCommand
этого не происходит, и вам нужно вручную подниматьCanExecuteChanged
, когда свойство, от которого оно зависит, изменяется. Кроме того, все команды переоцениваются, когда они связаны, поэтому что-то вроде скрытия, а затем отображения окна часто вызывает повторный запрос. - person Rachel   schedule 12.12.2012