Adam Markowitz'in cevabına ek olarak, kullanıcıya 'Açıklama' niteliğini gösterirken, ItemSourcebirleşik giriş kutusunun değerlerini (göreceli olarak) basitçe ayarlamanın genel amaçlı bir yolu enums. (Herkesin bunu yapmak isteyeceğini düşünüyorsunuz, böylece bir .NET olabilir tek astar olacaktı, ancak değil ve bulduğum en zarif yol bu).
İlk olarak, herhangi bir Enum değerini bir ComboBox öğesine dönüştürmek için bu basit sınıfı oluşturun:
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;
}
}
İkincisi sizin de OnLoadolay işleyicisi, sen bir listesini olmak için açılan kutunun kaynağını ayarlamanız gerekir ComboEnumItemsher dayalı Enumsizin de Enumtip. Bu Linq ile elde edilebilir. Ardından DisplayMemberPathşunları ayarlayın :
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";
}
Şimdi kullanıcı, kullanıcı dostu listenizden Descriptionsseçim yapacaktır, ancak seçtikleri enumkodda kullanabileceğiniz değer olacaktır . Kullanıcının kod seçimine erişmek için comboBoxUserReadable.SelectedItem, ComboEnumItemve comboBoxUserReadable.SelectedValueolacak EMyEnum.