C# 将参数传递给ICommand

C# 将参数传递给ICommand,c#,wpf,C#,Wpf,我有一个简单的按钮,在执行时使用命令,这一切都很好,但我想在单击按钮时传递一个文本参数 我认为我的XAML还可以,但我不确定如何编辑我的RelayCommand类以接收参数: <Button x:Name="AddCommand" Content="Add" Command="{Binding AddPhoneCommand}" CommandParameter="{Binding Text, ElementName=txtAddPhone}" /> public

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

我认为我的XAML还可以,但我不确定如何编辑我的
RelayCommand
类以接收参数:

<Button x:Name="AddCommand" Content="Add" 
    Command="{Binding AddPhoneCommand}"
    CommandParameter="{Binding Text, ElementName=txtAddPhone}" />
public void Execute(object parameter)
{
    _handler(parameter);
}

Action
更改为
Action
,以便它接受一个参数(可能只是
Action
最简单)

您只需执行此操作(无需更改RelayCommand或ICommand):

你可以这么做

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

谢谢,太好了!我不是WPF的新手,但我是MVVM的新手,所以命令是一个新概念;但我已经看到了它们将如何帮助单元测试。因此,adding并不是指object类型的操作,而是指这个委托接受一个对象参数?@MichaelHarper是的,确切地说,是一个接受一个对象参数的委托。你可以看到他们按照这些思路定义了多种动作类型:再次感谢,帮了大忙:D
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<string>((x) =>
        {
            if(x != null) { AddPhone(x); }
        };
    }
}
public void AddPhone(string x)
{
    //handle x
}