Kabul edilen cevabı daha da basitleştirebilirsiniz. Numaraları xaml'de dizeler olarak yazmak ve dönüştürücünüzde gerekenden daha fazla iş yapmak yerine, dize temsili yerine numaralandırma değerini açık bir şekilde iletebilirsiniz ve CrimsonX yorumladığında, hatalar çalışma zamanı yerine derleme zamanında atılır:
ConverterParameter = {x: Statik yerel: YourEnumType.Enum1}
<StackPanel>
<StackPanel.Resources>
<local:ComparisonConverter x:Key="ComparisonConverter" />
</StackPanel.Resources>
<RadioButton IsChecked="{Binding Path=YourEnumProperty, Converter={StaticResource ComparisonConverter}, ConverterParameter={x:Static local:YourEnumType.Enum1}}" />
<RadioButton IsChecked="{Binding Path=YourEnumProperty, Converter={StaticResource ComparisonConverter}, ConverterParameter={x:Static local:YourEnumType.Enum2}}" />
</StackPanel>
Ardından dönüştürücüyü basitleştirin:
public class ComparisonConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value?.Equals(parameter);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value?.Equals(true) == true ? parameter : Binding.DoNothing;
}
}
Düzenleme (Aralık 16 '10):
DependencyProperty.UnsetValue yerine Binding.DoNothing döndürmeyi önerdiği için anon'a teşekkürler.
Not - Aynı kapta birden fazla RadioButton grubu (17 Şubat 11):
Xaml'de, radyo düğmeleri aynı üst kapsayıcıyı paylaşıyorsa, bir kapsayıcı seçildiğinde o kaptaki diğer tüm öğelerin seçimi kaldırılır (farklı bir özelliğe bağlı olsalar bile). Bu nedenle, kendi kabında bir yığın paneli gibi birlikte gruplandırılmış ortak bir özelliğe bağlı RadioButton'unuzu tutmaya çalışın. İlgili RadioButton'larınızın tek bir üst kapsayıcıyı paylaşamadığı durumlarda, her RadioButton öğesinin GroupName özelliğini mantıksal olarak gruplandırmak için ortak bir değere ayarlayın.
Düzenle (5 Nisan '11):
Üçlü İşleç kullanmak için ConvertBack'in if-else yöntemi basitleştirildi.
Not - Bir sınıfta yuvalanmış numaralandırma türü (28 Nisan '11):
Numaralandırma türünüz bir sınıfta içiçe yerleştirilmişse (doğrudan ad alanında değil), XAML içindeki numaralandırmaya erişmek için 'işaretlenmemiş' sorusunda
bulunamadı (Bulunamıyor) sorusu
bulunamıyor WPF'de statik referans için enum tipi :
ConverterParameter = {x: Statik yerel: Sınıfınız + YourNestedEnumType.Enum1}
Bununla birlikte, bu Microsoft Connect Sorunu nedeniyle , VS2010'daki tasarımcı artık yükleme yüklemeyecek "Type 'local:YourClass+YourNestedEnumType' was not found."
, ancak proje başarıyla derleniyor ve çalışıyor. Tabii ki, enum türünüzü doğrudan ad alanına taşıyabiliyorsanız bu sorunu önleyebilirsiniz.
Düzenleme (Oca 27 '12):
Enum bayrakları kullanılıyorsa, dönüştürücü aşağıdaki gibi olacaktır:
public class EnumToBooleanConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return ((Enum)value).HasFlag((Enum)parameter);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value.Equals(true) ? parameter : Binding.DoNothing;
}
}
Düzenleme (7 Mayıs '15):
(Bir null Enum durumunda
değil , söz konusu istedi, ama mesela ORM DB'den null adlı dönen ya yazmasa bile programın mantığında değer sağlanmamış olması mantıklı olabilir, bazı durumlarda gerekli olabilir), eklemeyi unutmayın Dönüştürme Yöntemi'nde bir ilk null denetimi yapın ve aşağıdaki gibi (genellikle herhangi bir radyo düğmesinin seçilmesini istemiyorsanız) uygun olan bool değerini döndürün:
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null) {
return false; // or return parameter.Equals(YourEnumType.SomeDefaultValue);
}
return value.Equals(parameter);
}
Not - NullReferenceException (10 Ekim 18):
NullReferenceException özel durumunu atma olasılığını kaldırmak için örnek güncellendi.
IsChecked
döndürülebilir
Nullable<Boolean>
bir çözümdür.