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