Можно ли динамически переопределить метод CanExecute ICommand?

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

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

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


person Dave    schedule 09.03.2010    source источник


Ответы (1)


Пусть ваш производный класс 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.

person saret    schedule 09.03.2010
comment
спасибо, думаю, это солидный кандидат. Я попробую. - person Dave; 09.03.2010