0

我有以下使用 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}"/> 

但我想对另外两个按钮使用相同MyButtonClickCommand的按钮,而不是创建两个额外的 DelegateCommands MyButtonClickCommand1& MyButtonClickCommand2

所以我想要添加string1integer_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)}"/>
4

2 回答 2

3

您可以传递可以在 XAML 中声明的任何类的实例

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
}
于 2020-10-20T13:43:58.593 回答
0

使用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))
    {
        //---
    }
}
于 2020-10-20T13:41:12.663 回答