Что должно идти в CanExecute?

Я думаю, что есть конкретный ответ на это.

Если у меня есть команда привязки

private bool CanExecute(Object args){
  // Should this just be null checks?
  // Should it also contain logic? 
  // example:

  return this.SelectedObject != null;

  // or 

  return this.SelectedObject != null && this.SelectedObject.Status == 1;
}

private void Executed(Object args){

  //Or should logic be reserved for the Executed command

  if(this.SelectedObject.Status == 1)
     //Do stuff
  else
     //Don't do stuff
}

Кажется излишним иметь метод can execute, если мы выполняем дополнительную проверку данных в выполняемом методе.

2 ответа

Решение

Если логика вашей команды предполагает, что она не должна выполняться, когда выполнены некоторые условия, то CanExecute должны проверить эти условия.

Иначе, CanExecute должен вернуть истину.

Неважно, какова природа условий, но вы должны заметить, что длительные проверки могут повлиять на производительность потока пользовательского интерфейса.

Я вижу это так, что есть различие в том, МОЖЕТ ли что-то случиться, и если что-то ДОЛЖНО произойти.

Примером этого может быть кнопка сохранения или что-то еще. Пользователь может не иметь прав на сохранение объекта, поэтому действие НЕ МОЖЕТ произойти.

Если у пользователя есть права, все обязательные поля могут быть не заполнены, так что это НЕ ДОЛЖНО происходить.

Это в семантике.

Другие вопросы по тегам