Winforms Bind Enum to Radio Buttons
c#, data-binding, enums, radio-button, winforms
Solution
I know this is an old question, but it was the first to show up in my search results. I figured out a generic way to bind radio buttons to an enum, or even a string or number, etc.
private void AddRadioCheckedBinding<T>(RadioButton radio, object dataSource, string dataMember, T trueValue)
{
var binding = new Binding(nameof(RadioButton.Checked), dataSource, dataMember, true, DataSourceUpdateMode.OnPropertyChanged);
binding.Parse += (s, a) => { if ((bool)a.Value) a.Value = trueValue; };
binding.Format += (s, a) => a.Value = ((T)a.Value).Equals(trueValue);
radio.DataBindings.Add(binding);
}
And then either on your form's constructor or on the form load event, call it on each of your `RadioButton` controls. The `dataSource` is the object containing your enum property. I made sure that `dataSource` implemented the `INotifyPropertyChanged` interface is firing the `OnPropertyChanged` event in the enum properties setter.
AddRadioCheckedBinding(Choice1RadioButton, dataSource, "MyChoice", MyChoices.Choice1);
AddRadioCheckedBinding(Choice2RadioButton, dataSource, "MyChoice", MyChoices.Choice2);
Problem
If I have three radio buttons, what is the best way to bind them to an enum which has the same choices? e.g. ``` [] Choice 1 [] Choice 2 [] Choice 3 public enum MyChoices { Choice1, Choice2, Choice3 } ```