.NET привязка данных combobox к перечислению строк с атрибутами Description

У меня есть такое перечисление:

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, но я еще не смог решить проблему. Может ли кто-нибудь сказать мне, как, черт возьми, я отображаю описательную строку, но использую ли привязку данных значение для хранения и т. Д.? Спасибо !!!

7
задан bmt22033 3 August 2011 в 01:38
поделиться