В настоящее время я привязываю свои переключатели индивидуально, другими словами, у меня есть 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...");
}
Большое спасибо за твою помощь!
Рад помочь вам :)
Однако вам следует попытаться найти более общее значение для CommandParameter. Имя элемента представления не должно быть известно в модели представления. Обратите внимание, что вы могли бы, например, назначьте строку типа CommandParameter = "1".
@Clemens, если OP хочет, он может привязать имя RadioButton из ViewModel
В этом нет необходимости. Просто назначьте что-то уникальное для CommandParameter.
@Clemens - Как я могу установить уникальную строку в CommandParameter? Я пробовал CommandParameter = "{Binding Path = "SomeString"}" и CommandParameter = "{Binding Path=SomeString}", но не смог уловить значение в ViewModel.
Для этой привязки требуется свойство SomeString в модели представления.
@fs_tigre вы можете просто установить CommandParameter буквальной строкой, например CommandParameter = 1
CommandParameter = "UniqueString" сделал свое дело, большое спасибо!
передать некоторый CommandParameter, уникальный для каждого RadioButton