एडम मार्कोविट के जवाब के आगे, यहाँ (अपेक्षाकृत) का एक सामान्य उद्देश्य तरीका है, बस उपयोगकर्ता को 'विवरण' विशेषता दिखाते हुए ItemSourceकॉम्बोक्स के मूल्यों को निर्धारित करना enums। (आपको लगता है कि हर कोई ऐसा करना चाहेगा। यह एक .NET लाइनर होगा, लेकिन यह सिर्फ नहीं है, और यह सबसे सुंदर तरीका है जो मैंने पाया है)।
सबसे पहले, किसी भी Enum मान को कॉम्बो बॉक्स आइटम में परिवर्तित करने के लिए यह सरल वर्ग बनाएं:
public class ComboEnumItem {
public string Text { get; set; }
public object Value { get; set; }
public ComboEnumItem(Enum originalEnum)
{
this.Value = originalEnum;
this.Text = this.ToString();
}
public string ToString()
{
FieldInfo field = Value.GetType().GetField(Value.ToString());
DescriptionAttribute attribute = Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute)) as DescriptionAttribute;
return attribute == null ? Value.ToString() : attribute.Description;
}
}
दूसरे, आपके OnLoadईवेंट हैंडलर में, आपको अपने कॉम्बो बॉक्स के स्रोत को अपने प्रकार के ComboEnumItemsप्रत्येक पर आधारित सूची के रूप में सेट करने की आवश्यकता है । यह Linq के साथ हासिल किया जा सकता है। फिर बस सेट करें :EnumEnumDisplayMemberPath
void OnLoad(object sender, RoutedEventArgs e)
{
comboBoxUserReadable.ItemsSource = Enum.GetValues(typeof(EMyEnum))
.Cast<EMyEnum>()
.Select(v => new ComboEnumItem(v))
.ToList();
comboBoxUserReadable.DisplayMemberPath = "Text";
comboBoxUserReadable.SelectedValuePath= "Value";
}
अब उपयोगकर्ता आपके उपयोगकर्ता के अनुकूल की एक सूची से Descriptionsचयन करेगा, लेकिन वे जो चुनते हैं उसका enumमूल्य होगा जो आप कोड में उपयोग कर सकते हैं। कोड में उपयोगकर्ता के चयन का उपयोग करने के लिए, comboBoxUserReadable.SelectedItemहोगा ComboEnumItemऔर comboBoxUserReadable.SelectedValueहोगा EMyEnum।