将参数传递给ICommand

我有一个简单的按钮,在执行时使用命令,这一切都正常,但我想在单击按钮时传递一个文本参数。

我认为我的XAML没问题,但我不确定如何编辑我的RelayCommand类来接收参数:

 
 public class RelayCommand : ICommand { private readonly Action _handler; private bool _isEnabled; public RelayCommand(Action handler) { _handler = handler; } public bool IsEnabled { get { return _isEnabled; } set { if (value != _isEnabled) { _isEnabled = value; if (CanExecuteChanged != null) { CanExecuteChanged(this, EventArgs.Empty); } } } } public bool CanExecute(object parameter) { return IsEnabled; } public event EventHandler CanExecuteChanged; public void Execute(object parameter) { _handler(); } } 

Action更改为Action以便它需要一个参数(可能只是Action是最简单的)。

 private readonly Action _handler; 

然后简单地传递参数:

 public void Execute(object parameter) { _handler(parameter); } 

您可以简单地执行此操作(无需更改RelayCommand或ICommand):

 private RelayCommand _addPhoneCommand; public RelayCommand AddPhoneCommand { get { if (_addPhoneCommand == null) { _addPhoneCommand = new RelayCommand( (parameter) => AddPhone(parameter), (parameter) => IsValidPhone(parameter) ); } return _addPhoneCommand; } } public void AddPhone(object parameter) { var text = (string)parameter; ... } public void IsValidPhone(object parameter) var text = (string)parameter; ... } 

你可以这样做

 public ICommand AddPhoneCommand { get { return new Command((x) => { if(x != null) { AddPhone(x); } }; } } 

然后,当然有你的AddPhone

 public void AddPhone(string x) { //handle x }