… Databinding von einem Enum-Property an RadioButtons und umgekehrt natürlich.
Folgende Situation, wir haben ein paar RadioButtons:

Diese wollen wir an folgendes Property im ViewModel binden:
public enum TemplateType { Empty, Contact, Booking, ReservationRestaurant, Appointment }
private TemplateType _selectedTemplateType = TemplateType.Empty;
public TemplateType SelectedTemplateType
{
get
{
return _selectedTemplateType;
}
set
{
Set(() => SelectedTemplateType, ref _selectedTemplateType, value);
}
}
Hier haben wir ein Enum und die Eigenschaft. Das Enum soll entsprechend der Auswahl der RadioButtons gesetzt werden und umgekehrt natürlich auch.
Möglich macht dies der folgende IValueConverter:
public class EnumBooleanConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string parameterString = parameter.ToString();
if (parameterString == null)
return DependencyProperty.UnsetValue;
if (Enum.IsDefined(value.GetType(), value) == false)
return DependencyProperty.UnsetValue;
object parameterValue = Enum.Parse(value.GetType(), parameterString);
return parameterValue.Equals(value);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string parameterString = parameter.ToString();
if (parameterString == null)
return DependencyProperty.UnsetValue;
return Enum.Parse(targetType, parameterString);
}
}
Quelle: https://stackoverflow.com/questions/397556/how-to-bind-radiobuttons-to-an-enum
Der Konverter ist universell einsetzbar. Er stamm mit geringen Modifikationen von StackOverflow.com, dort gerne auch noch vorbeischauen.
Nun müssen wir noch das DataBinding im Xaml-Code einfügen:
<RadioButton x:Name="RadioEmptyForm"
IsChecked="{Binding SelectedTemplateType, Converter={StaticResource EnumBooleanConverter},
ConverterParameter={x:Static vm:FormCreationWizardModel+TemplateType.Empty}}"
GroupName="TemplateType"
Content="Create empty form"></RadioButton>
Spannend ist der Teil des Parameters:
{x:Static vm:FormCreationWizardModel+TemplateType.Empty}
Hier geben wir den Wert aus unserem Enum an. Das Enum ist in der Klasse „FormCreationWizardModel“ definiert, daher die etwas krude Syntax mit dem +. Der zweite RadioButton sieht nun so aus:
<RadioButton x:Name="RadioContactForm"
IsChecked="{Binding SelectedTemplateType, Converter={StaticResource EnumBooleanConverter},
ConverterParameter={x:Static vm:FormCreationWizardModel+TemplateType.Contact}}"
Content="Contact form"
GroupName="TemplateType"
Margin="0,10,0,0"></RadioButton>
Und so weiter…
