Вопрос реализации ICommand - PullRequest
1 голос
/ 26 января 2010

Я делаю следующее руководство , чтобы узнать о шаблоне MVVM в WPF. Есть кое-что, чего я не понимаю в следующей, казалось бы, частично заданной реализации интерфейса ICommand.

В приведенном ниже коде переменная _canExecute используется как метод и переменная. Я думал, что это какое-то событие, но у ICommand уже есть событие, которое нужно реализовать, и это не _canExecute.

Так может ли кто-нибудь помочь мне относительно того, что _canExecute должен быть?

  1: #region ICommand Members
  2: 
  3: public bool CanExecute(object parameter) {
  4:     return _canExecute == null ? true : _canExecute(parameter);
  5: }
  6: 
  7: public event EventHandler CanExecuteChanged {
  8:     add { CommandManager.RequerySuggested += value; }
  9:     remove { CommandManager.RequerySuggested -= value; }
 10: }
 11: 
 12: public void Execute(object parameter) {
 13:     _execute(parameter);
 14: }
 15: 
 16: #endregion

Ответы [ 4 ]

3 голосов
/ 26 января 2010

_canExecute будет Predicate<object>, тогда как _ execute будет Action<object>.

См. Мой пост команды делегата в блоге для другого примера.

0 голосов
/ 26 января 2010

Я думаю, что создатель кода хотел отделить логику CanExecute с помощью делегата Predicate, чтобы наследники класса Base Command могли решать, будет ли CanExecute таким, как этот

class DefaultCommand:BaseCommand
{
    //_canExecute is supposed protected Predicate<string> in base class
    public DefaultCommand()
    {
       base._canExecute =x=>x=="SomeExecutable";
    }
}
0 голосов
/ 26 января 2010

По умолчанию предполагается, что CanExecute всегда имеет значение true, если только делегат bool не был передан для оценки в противном случае.

0 голосов
/ 26 января 2010

Я могу ошибаться, но насколько я знаю, как обычно реализуется ICommand, и я могу понять учебник, есть ошибка, и она должна читать

public bool CanExecute(object parameter) {
   return _execute == null ? false : true;
}

или, возможно, _canExecute - это функциональный объект, на который перенаправляется запрос. В этом случае учебник неясен.

Во всяком случае, я бы посоветовался с автором о том, что он имел в виду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...