在MVVM / MVVM Light中绑定单选按钮的正确方法是什么

时间:2018-07-10 12:11:44

标签: c# wpf mvvm mvvm-light

我目前正在分别绑定我的单选按钮,换句话说,我每个按钮都有一个command,一切正常,但是我想以某种方式只绑定一个命令。

这就是我所拥有的...

XAML:

<RadioButton x:Name="radioButton1" 
                         Content="RadioButton1"  
                         IsChecked="True"
                         Command="{Binding RadioButton1Command }"/>
<RadioButton x:Name="radioButton2" 
                         Content="RadioButton2"  
                         IsChecked="True"
                         Command="{Binding RadioButton2Command }"/>

ViewModel:

    public RelayCommand RadioButton1Command { get; }
    public RelayCommand RadioButton2Command { get; }

    public MyClassConstructorViewModel()
    {
        RadioButton1Command = new RelayCommand(radioButton1Click);
        RadioButton1Command = new RelayCommand(radioButton2Click);
    }


    private void radioButton1Click()
    {
        Console.WriteLine("Radio Button 1 Clicked...");
    }
    private void radioButton2Click()
    {
        Console.WriteLine("Radio Button 2 Clicked...");
    }

是否可以将所有单选按钮绑定到单个RelayCommand并能够做出相应响应?

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以绑定RadioButton的名称。通过方法中收到的名称,您可以执行正确的操作。

XAML

<RadioButton x:Name="radioButton1" 
                         Content="RadioButton1"  
                         IsChecked="True"
                         Command="{Binding RadioButtonCommand }" CommandParameter="{Binding Path=Name, RelativeSource={RelativeSource Self}}"/>

<RadioButton x:Name="radioButton2" 
                         Content="RadioButton2"  
                         IsChecked="True"
                         Command="{Binding RadioButtonCommand }" CommandParameter="{Binding Path=Name, RelativeSource={RelativeSource Self}}"/>

ViewModel

public RelayCommand<string> RadioButtonCommand { get; }

public MyClassConstructorViewModel()
{
    RadioButtonCommand = new RelayCommand<string>(radioButtonClick);
}


private void radioButtonClick(string name)
{
    if(name == "radioButton1")
        Console.WriteLine("Radio Button 1 Clicked...");
    else if(name == "radioButton2")
        Console.WriteLine("Radio Button 2 Clicked...");
}