将三个参数传递给 Prism DelegateCommand 以在不同的按钮命令上使用相同的命令【MVVM 模式】
Pass three parameters to Prism DelegateCommand to use the same command on different button commands [MVVM mode]
我有以下使用 Prism 库创建的 DelegateCommand。
public class AddressModel : INotifyPropertyChanged
{
public ICommand MyButtonClickCommand
{
get { return new DelegateCommand<object>(FuncToCall); }
}
public void FuncToCall(object context)
{
//this is called when the button is clicked
Method1("string1", integer_number1);
}
}
我已经将 MyButtonClickCommand
绑定到 XAML 文件中的一个按钮。
<Button Content="Click me"
Command="{Binding MyButtonClickCommand}"/>
但我想对另外 2 个按钮使用相同的 MyButtonClickCommand
,而不是创建两个额外的 DelegateCommands MyButtonClickCommand1
& MyButtonClickCommand2
。
所以我想要的是添加 string1
和 integer_number1
作为参数,并在不同的按钮上调用相同的 ICommand,如下所示
<Button Content="Click me"
Command="{Binding MyButtonClickCommand("string1", integer_number1)}"/>
<Button Content="Click me 2"
Command="{Binding MyButtonClickCommand("string2", integer_number2)}"/>
<Button Content="Click me 3"
Command="{Binding MyButtonClickCommand("string3", integer_number3)}"/>
使用 CommandParameter
属性:
<Button Content="Click me 2"
Command="{Binding MyButtonClickCommand}"
CommandParameter="2" />
然后您可以将 context
参数转换为命令参数的任何值:
public void FuncToCall(object context)
{
string parameter = context as string;
if (int.TryParse(parameter, out int number))
{
//---
}
}
您可以传递可以在 XAML
中声明的任何 class 的实例
public class MyCommandParameter
{
public int MyInt { get; set; }
public string MyString { get; set; }
}
到按钮的 CommandParameter
属性:
<Button Content="Click me" Command="{Binding ...}">
<Button.CommandParameter>
<local:MyCommandParameter MyInt="2" MyString="Hello"/>
</Button.CommandParameter>
</Button>
MyCommandParameter 实例传递给 Execute 处理程序方法的参数:
public void FuncToCall(object parameter)
{
var param = (MyCommandParameter)parameter;
// do something with param.MyInt and param.MyString
}
我有以下使用 Prism 库创建的 DelegateCommand。
public class AddressModel : INotifyPropertyChanged
{
public ICommand MyButtonClickCommand
{
get { return new DelegateCommand<object>(FuncToCall); }
}
public void FuncToCall(object context)
{
//this is called when the button is clicked
Method1("string1", integer_number1);
}
}
我已经将 MyButtonClickCommand
绑定到 XAML 文件中的一个按钮。
<Button Content="Click me"
Command="{Binding MyButtonClickCommand}"/>
但我想对另外 2 个按钮使用相同的 MyButtonClickCommand
,而不是创建两个额外的 DelegateCommands MyButtonClickCommand1
& MyButtonClickCommand2
。
所以我想要的是添加 string1
和 integer_number1
作为参数,并在不同的按钮上调用相同的 ICommand,如下所示
<Button Content="Click me"
Command="{Binding MyButtonClickCommand("string1", integer_number1)}"/>
<Button Content="Click me 2"
Command="{Binding MyButtonClickCommand("string2", integer_number2)}"/>
<Button Content="Click me 3"
Command="{Binding MyButtonClickCommand("string3", integer_number3)}"/>
使用 CommandParameter
属性:
<Button Content="Click me 2"
Command="{Binding MyButtonClickCommand}"
CommandParameter="2" />
然后您可以将 context
参数转换为命令参数的任何值:
public void FuncToCall(object context)
{
string parameter = context as string;
if (int.TryParse(parameter, out int number))
{
//---
}
}
您可以传递可以在 XAML
中声明的任何 class 的实例public class MyCommandParameter
{
public int MyInt { get; set; }
public string MyString { get; set; }
}
到按钮的 CommandParameter
属性:
<Button Content="Click me" Command="{Binding ...}">
<Button.CommandParameter>
<local:MyCommandParameter MyInt="2" MyString="Hello"/>
</Button.CommandParameter>
</Button>
MyCommandParameter 实例传递给 Execute 处理程序方法的参数:
public void FuncToCall(object parameter)
{
var param = (MyCommandParameter)parameter;
// do something with param.MyInt and param.MyString
}