Можно ли динамически переопределить метод CanExecute ICommand? - PullRequest
1 голос
/ 09 марта 2010

Мне не удалось найти какую-либо информацию по этому вопросу, и похоже, что это мог быть единственный способ решить мой вопрос о SO *, оставшийся без ответа. Тем не менее, я думаю, что это действительно должен быть отдельный вопрос сейчас.

Мне интересно, существует ли способ динамического переопределения метода CanExecute производного от ICommand класса. Я все еще новичок в .NET и, возможно, это действительно очевидно, но я не смог понять это. Кто-нибудь здесь делал такие вещи раньше? Если бы я мог заставить это работать, это было бы очень полезно для моей конкретной проблемы. По сути, я хочу иметь возможность перебирать список ICommands и заставить все их методы CanExecute возвращать true, заменив их реализацию другой.

Из поиска таких вещей, как "замена кода .NET", я нашел эту статью , но я надеялся, что есть немного более простой подход. Однако, если мне придется, я сделаю это.

1 Ответ

2 голосов
/ 09 марта 2010

Пусть ваш производный класс ICommand вызовет делегата, чтобы определить, можно ли выполнить CanExecute, таким образом вы можете выставить установщик для делегата и изменить его во время выполнения

В качестве простого примера:

public class MyCommand : ICommand
{
  private Func<object, bool> _canExecuteMethod;

  public void SetCanExecuteMethod(Func<object, bool> canExecuteMethod)
  {
    //check delegate not null if need be
    _canExecuteMethod = canExecuteMethod;
  }

  public bool CanExecute(object parameter)
  {
    //check for null delegate - maybe return false if it's null....
    return _canExecuteMethod(parameter);
  }

  //....other codefor ICommand

}

Вы также можете использовать только Func<bool> для делегата, если вам не нужны дополнительные данные для принятия решения. Также делегат может быть предоставлен в другом месте, если требуется, и просто вызван из класса ICommand

...