Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

binding radiobuttons group to a property in WPF

Let's imagine that I have:

<RadioButton GroupName="Group1" IsChecked="{Binding Path=RadioButton1IsChecked}" /> <RadioButton GroupName="Group1" IsChecked="{Binding Path=RadioButton2IsChecked}" /> 

And then in my data source class I have:

public bool RadioButton1IsChecked { get; set; } public bool RadioButton2IsChecked { get; set; } public enum RadioButtons { RadioButton1, RadioButton2, None } public RadioButtons SelectedRadioButton {     get     {         if (this.RadioButtonIsChecked)              return RadioButtons.RadioButton1;         else if (this.RadioButtonIsChecked)              return RadioButtons.RadioButton2;         else              return RadioButtons.None;      } } 

Can I somehow bind my radio buttons directly to SelectedRadioButton property? I really need RadioButton1IsChecked and RadioButton2IsChecked properties only to calculate the selected radiobutton.

like image 992
Bogdan Verbenets Avatar asked Feb 09 '12 14:02

Bogdan Verbenets


2 Answers

Declare an enumeration similar to:

enum RadioOptions {Option1, Option2} 

XAML:

<RadioButton IsChecked="{Binding SelectedOption, Converter={StaticResource EnumBooleanConverter}, ConverterParameter={x:Static local:RadioOptions.Option1}}"/> <RadioButton IsChecked="{Binding SelectedOption, Converter={StaticResource EnumBooleanConverter}, ConverterParameter={x:Static local:RadioOptions.Option2}}"/> 

Converter class:

public class EnumBooleanConverter : IValueConverter {     public object Convert(object value, Type targetType, object parameter, CultureInfo culture)     {         return value.Equals(parameter);     }      public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)     {         return ((bool)value) ? parameter : Binding.DoNothing;     } } 
like image 85
Usman Zafar Avatar answered Sep 25 '22 06:09

Usman Zafar


<RadioButton GroupName="Group1" IsChecked="{Binding Path=SelectedRadioButton, Converter={StaticResource EnumBooleanConverter}, ConverterParameter=RadioButton1}" /> <RadioButton GroupName="Group1" IsChecked="{Binding Path=SelectedRadioButton, Converter={StaticResource EnumBooleanConverter}, ConverterParameter=RadioButton2}" /> 
public enum RadioButtons { RadioButton1, RadioButton2, None } public RadioButtons SelectedRadioButton {get;set;}   public class EnumBooleanConverter : IValueConverter     {         public object Convert(object value, Type targetType, object parameter, CultureInfo culture)         {             var ParameterString = parameter as string;             if (ParameterString == null)                 return DependencyProperty.UnsetValue;              if (Enum.IsDefined(value.GetType(), value) == false)                 return DependencyProperty.UnsetValue;              object paramvalue = Enum.Parse(value.GetType(), ParameterString);             return paramvalue.Equals(value);         }          public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)         {             var ParameterString = parameter as string;             var valueAsBool = (bool) value;              if (ParameterString == null || !valueAsBool)             {                 try                 {                     return Enum.Parse(targetType, "0");                 }                 catch (Exception)                 {                     return DependencyProperty.UnsetValue;                 }             }             return Enum.Parse(targetType, ParameterString);         }     } 
like image 39
Bogdan Verbenets Avatar answered Sep 22 '22 06:09

Bogdan Verbenets