Как правильно привязать переключатель в 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 и иметь возможность реагировать соответствующим образом?

Спасибо!

передать некоторый CommandParameter, уникальный для каждого RadioButton

ASh 10.07.2018 14:13
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
1 587
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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...");
}

Большое спасибо за твою помощь!

fs_tigre 10.07.2018 14:35

Рад помочь вам :)

Antoine V 10.07.2018 14:37

Однако вам следует попытаться найти более общее значение для CommandParameter. Имя элемента представления не должно быть известно в модели представления. Обратите внимание, что вы могли бы, например, назначьте строку типа CommandParameter = "1".

Clemens 10.07.2018 14:40

@Clemens, если OP хочет, он может привязать имя RadioButton из ViewModel

Antoine V 10.07.2018 14:41

В этом нет необходимости. Просто назначьте что-то уникальное для CommandParameter.

Clemens 10.07.2018 14:42

@Clemens - Как я могу установить уникальную строку в CommandParameter? Я пробовал CommandParameter = "{Binding Path = "SomeString"}" и CommandParameter = "{Binding Path=SomeString}", но не смог уловить значение в ViewModel.

fs_tigre 10.07.2018 16:20

Для этой привязки требуется свойство SomeString в модели представления.

Clemens 10.07.2018 16:22

@fs_tigre вы можете просто установить CommandParameter буквальной строкой, например CommandParameter = 1

Antoine V 10.07.2018 16:22
CommandParameter = "UniqueString" сделал свое дело, большое спасибо!
fs_tigre 10.07.2018 16:24

Другие вопросы по теме