使用单个通用命令来处理多个按钮

本文关键字:按钮 处理 单个通 命令 | 更新日期: 2023-09-27 18:21:03

我正在构建一个简单的Calculator应用程序。我还在学习如何在我的应用程序中应用MVVM模式。

我希望计算器的每个"数字"按钮都绑定到同一个命令,它们只会在引发命令的按钮的数字(文本)上有所不同。

例如,当单击按钮"1"时,我希望收到有关它的通知,从Sender的属性中提取"1",然后继续所需的其余工作。

这使我可以定义一个单独的方法,而不是10个不同的处理程序。

到目前为止,我在所有MVVM教程中都看到了这一点,因为在绑定到将处理单击的实际方法时,命令绑定并没有向我提供所有这些信息。

有什么方法可以轻松地完成我的要求吗?

使用单个通用命令来处理多个按钮

假设我理解您要做的操作,您可以使用CommandParameter属性让不同的按钮为同一命令提供值。例如:

...
    <Button Content="1" Command="{Binding ButtonClickCommand}" CommandParameter="1"/>
    <!-- Or, bind directly to the button's content using RelativeSource, like so: -->
    <Button Content="2" Command="{Binding ButtonClickCommand}"                    
                        CommandParameter="{Binding RelativeSource={RelativeSource Self}, Path=Content}"/>
...

在您的命令的委托方法中:

private void ButtonClickCommandHandler(object parameter)
{
    switch(int.Parse(parameter.ToString()))
    {
        case 1:
        ...
        case 2:
        ...
    }
}

只需将数字作为Button.CommandParameter提供即可。(作为ICommand.Execute(和CanExecute)的方法参数传递)