आप स्वीकृत उत्तर को और सरल कर सकते हैं। एनाम में स्ट्रिंग के रूप में टाइप करने और जरूरत से ज्यादा अपने कनवर्टर में काम करने के बजाय, आप स्पष्ट रूप से एक स्ट्रिंग प्रतिनिधित्व के बजाय एनम मूल्य में पास कर सकते हैं, और जैसा कि क्रिमसनएक्स ने टिप्पणी की, त्रुटियों को रनटाइम की तुलना में संकलन समय पर फेंक दिया जाता है:
कन्वर्टरपेयर = {x: स्टेटिक लोकल: 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>
फिर कनवर्टर को सरल बनाएं:
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;
}
}
संपादित करें (16 दिसंबर 10):
बाइंडिंग को वापस भेजने के सुझाव के लिए एनॉन का धन्यवाद।
नोट - एक ही कंटेनर में रेडियोबटन के कई समूह (17 फ़रवरी 11):
Xaml में, यदि रेडियो बटन एक ही मूल कंटेनर को साझा करते हैं, तो एक का चयन उस कंटेनर के भीतर अन्य सभी का चयन करेगा (भले ही वे एक अलग संपत्ति से बंधे हों)। तो अपने RadioButton को रखने की कोशिश करें जो एक समान संपत्ति के साथ बंधे हों जैसे कि अपने स्वयं के कंटेनर में एक स्टैक पैनल की तरह। ऐसे मामलों में जहां आपके संबंधित रेडियोबटन एक भी माता-पिता कंटेनर को साझा नहीं कर सकते हैं, फिर प्रत्येक रेडियोबटन के GroupName गुण को सामान्य रूप से उन्हें समूहबद्ध करने के लिए एक सामान्य मान सेट करें।
संपादित करें (अप्रैल 5 '11):
सरलीकृत ConvertBack का यदि और नहीं तो एक Ternary ऑपरेटर का उपयोग करने के लिए।
नोट - एनम प्रकार एक वर्ग में निहित है (अप्रैल 28 '11):
यदि आपकी ईनम का प्रकार एक वर्ग (सीधे नामस्थान में) में नेस्टेड है, तो आप XAML में एनम तक पहुँचने के लिए '+' सिंटैक्स का उपयोग करने में सक्षम हो सकते हैं (जैसा कि चिह्नित नहीं है) प्रश्न का उत्तर
खोजने में असमर्थ है। WPF में स्थिर संदर्भ के लिए enum प्रकार :
कन्वर्टरपेयर = {x: स्टेटिक लोकल: YourClass + YourNestedEnumType.Enum1}
इस Microsoft कनेक्ट इश्यू के कारण , हालांकि, VS2010 में डिज़ाइनर अब स्टिंग को लोड नहीं करेगा "Type 'local:YourClass+YourNestedEnumType' was not found."
, लेकिन प्रोजेक्ट कंपाइल करता है और सफलतापूर्वक चलता है। बेशक, आप इस समस्या से बच सकते हैं यदि आप अपने एनम प्रकार को सीधे नामस्थान पर ले जाने में सक्षम हैं।
संपादित करें (27 जनवरी 12):
यदि Enum झंडे का उपयोग करते हैं, तो कनवर्टर निम्नानुसार होगा:
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;
}
}
संपादित करें (7 मई 15):
एक अशक्त एनम के मामले में (जो प्रश्न में
नहीं पूछा गया है, लेकिन कुछ मामलों में इसकी आवश्यकता हो सकती है, जैसे ORM DB से DB लौट रहा है या जब भी यह समझ सकता है कि प्रोग्राम लॉजिक में मान प्रदान नहीं किया गया है), जोड़ना याद रखें कन्वर्ट विधि में एक प्रारंभिक अशक्त जाँच करें और उचित बूल मान लौटाएँ, जो आम तौर पर गलत है (यदि आप किसी भी रेडियो बटन का चयन नहीं करना चाहते हैं), नीचे की तरह:
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);
}
नोट - NullReferenceException (10 अक्टूबर 18):
NullReferenceException को फेंकने की संभावना को दूर करने के लिए उदाहरण को अपडेट किया।
IsChecked
एक अशक्त प्रकार है इसलिए वापस लौटना
Nullable<Boolean>
एक उचित समाधान लगता है।