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.
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; } }
<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); } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With