एडम मार्कोविट के जवाब के आगे, यहाँ (अपेक्षाकृत) का एक सामान्य उद्देश्य तरीका है, बस उपयोगकर्ता को 'विवरण' विशेषता दिखाते हुए 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 के साथ हासिल किया जा सकता है। फिर बस सेट करें :Enum
Enum
DisplayMemberPath
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
।