Как я могу использовать RelayCommand в wpf?

Как я могу использовать RelayCommand в wpf?

2 ответов


команда Relay не существует в WPF, это просто внешний класс, который поднялся до выдающегося положения после того, как он был определен в эта статья MSDN. Вы должны написать его сами, если хотите его использовать.

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


Ах, вопрос изменился, пока я набирал этот ответ. Предполагая, что вы используете RelayCommand, как определено выше, вам нужно предоставить ему один или два делегата, один, который возвращает bool, который определяет, находится ли команда в допустимом состоянии для запуска, и второй, который ничего не возвращает и фактически запускает команду. Если вы не предоставите делегат "CanRun", команда будет считать, что он всегда находится в допустимом состоянии. Код, используемый в статье:

RelayCommand _saveCommand;
public ICommand SaveCommand
{
    get
    {
        if (_saveCommand == null)
        {
            _saveCommand = new RelayCommand(param => this.Save(),
                param => this.CanSave );
        }
        return _saveCommand;
    }
}

объявляет RelayCommand, который вызовет метод Save () при срабатывании и вернет Собственность кэнсэйв в качестве теста на истинность. Когда эта команда привязана к кнопке в WPF, свойство Isenabled кнопки будет соответствовать свойству CanSave ViewModel, и когда кнопка нажата (если она включена), метод Save () будет вызван на ViewModel.


в качестве альтернативы созданию RelayCommand обертки для всех методов я могу предложить бесплатную библиотеку и источник, который позволит вам использовать привязку {BindTo Save()}. Я создал его, чтобы упростить привязки. Это также облегчает относительную привязку. Вы можете найти его здесь: http://www.simplygoodcode.com/2012/08/simpler-wpf-binding.html