У меня есть такое перечисление:
public enum Cities
{
[Description("New York City")]
NewYork,
[Description("Los Angeles")]
LosAngeles,
Washington,
[Description("San Antonio")]
SanAntonio,
Chicago
}
Я хочу связать это со списком со списком, и я пробовал это:
comboBox.DataSource = Enum.GetNames(typeof(Cities));
Но это отображает значения в поле со списком, а не описание String. Итак, я переключился на это:
public static string GetEnumDescription(Enum value)
{
FieldInfo fi = value.GetType().GetField(value.ToString());
DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false);
if (attributes != null && attributes.Length > 0)
{
return attributes[0].Description;
}
else
{
return value.ToString();
}
}
public static IList ToList(this Type type)
{
ArrayList list = new ArrayList();
Array enumValues = Enum.GetValues(type);
foreach (Enum value in enumValues)
{
list.Add(new KeyValuePair<Enum, string>(value, GetEnumDescription(value)));
}
return list;
}
Теперь вызов list.Add () приводит к отображению значения и его строкового описания в поле со списком, поэтому я заменил
list.Add(new KeyValuePair<Enum, string>(value, GetEnumDescription(value)));
на
list.Add(GetEnumDescription(value));
, и теперь я получаю только описательную строку отображается в поле со списком, чего я в конечном итоге и хочу. Теперь моя привязка данных нарушена, потому что не может найти только описание строки в перечислении. Я думал, что это может быть связано с combobox.DisplayMember и combobox.ValueMember, но я еще не смог решить проблему. Может ли кто-нибудь сказать мне, как, черт возьми, я отображаю описательную строку, но использую ли привязку данных значение для хранения и т. Д.? Спасибо !!!