Adam Markowitz'in cevabına ek olarak, kullanıcıya 'Açıklama' niteliğini gösterirken, ItemSource
birleş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 OnLoad
olay işleyicisi, sen bir listesini olmak için açılan kutunun kaynağını ayarlamanız gerekir ComboEnumItems
her dayalı Enum
sizin de Enum
tip. 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 Descriptions
seçim yapacaktır, ancak seçtikleri enum
kodda kullanabileceğiniz değer olacaktır . Kullanıcının kod seçimine erişmek için comboBoxUserReadable.SelectedItem
, ComboEnumItem
ve comboBoxUserReadable.SelectedValue
olacak EMyEnum
.