Search code examples
wpfmvvmradio-buttonc#-5.0

How to properly use radiobutton checked event in mvvm pattern?


When a particular radiobutton is checked/clicked on I want to write some specific text for each of those radiobuttons in a particular textblock. How do I do that following the MVVM pattern ?

In my main viewmodel I have the following code...

        public ICommand MyCommand { get; set; }
        private string _txt;
        public string Txt
        {
            get
            {
                return _txt;
            }
            set
            {
                _txt = value;
                OnPropertyChanged("Txt");
            }
        }

        private bool canexecutemethod(object parameter)
        {
            if (parameter != null)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        private void executemethod(object parameter)
        {
            //what to do here;
        }

        public MainViewModel()
        {
            MyCommand = new RelayCommand(executemethod);
        }

Also in the xaml:

<RadioButton VerticalAlignment="Center" Margin="15" Content="Name" Command="{Binding MyCommand}"/>
<RadioButton VerticalAlignment="Center" Margin="15" Content="Age" Command="{Binding MyCommand}"/>
<RadioButton VerticalAlignment="Center" Margin="15" Content="DOB" Command="{Binding MyCommand}"/>
<TextBlock Margin="5" Height="30" Width="150" Foreground="Red" Text="{Binding Txt, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>

Say when the first radiobutton is checked the textblock text should show some text like

Please enter a name

, when the second radiobutton is checked the textblock text should show some text like

Please enter a valid age/integer value

and so on...


Solution

  • it can be done without view model participation:

    <RadioButton VerticalAlignment="Center" Margin="15" Content="Name" Name="chkName"/>
    <RadioButton VerticalAlignment="Center" Margin="15" Content="Age"  Name="chkAge"/>
    <RadioButton VerticalAlignment="Center" Margin="15" Content="DOB"  Name="chkDob"/>
    
    <TextBlock Margin="5" Height="30" Width="150" Foreground="Red">
        <TextBlock.Style>
            <Style TargetType="TextBlock">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ElementName=chkName,Path=IsChecked}" Value="True">
                        <Setter Property="Text" Value="Please enter a name"/>
                    </DataTrigger>
                    <DataTrigger Binding="{Binding ElementName=chkAge,Path=IsChecked}" Value="True">
                        <Setter Property="Text" Value="Please enter a valid age/integer value"/>
                    </DataTrigger> 
                </Style.Triggers>
            </Style>
        </TextBlock.Style>
    </TextBlock>