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

What is the proper way to bind a radio button in 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 并能够做出相应的响应?

谢谢!

可以绑定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...");
}