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