WPF: Могу ли я связать перечисление со списком? - PullRequest
1 голос
/ 02 декабря 2009

Я пытаюсь, чтобы в комбинированном окне отображался предопределенный набор значений - в данном случае enum. Например:

public enum Protocol
{
    UDP = 0,
    TCP,
    RS232
}

Однако, похоже, мне не удается это сделать. Это вообще возможно? Я пытался использовать привязку данных, однако Blend нашел только все классы из пространства имен, а не enum (который, очевидно, не является объектом)

Ответы [ 2 ]

1 голос
/ 02 декабря 2009

Привязать names ниже к вашему ComboBox:

var names = Enum.GetNames( typeof(Protocol) );
0 голосов
/ 02 декабря 2009

Не знаю о WPF, но в веб-формах (так как я использую MVP) я связываю List> с ddl. Чтобы получить список, вот код

var pairs = new List<KeyValuePair<string, string>>();

            pairs.Add(new KeyValuePair<string, string>("Please Select", String.Empty));

            for (int i = 0; i < typeof(DepartmentEnum).GetFields().Length - 1; i++)
            {
                DepartmentEnum de = EnumExtensions.NumberToEnum<DepartmentEnum>(i);
                pairs.Add(new KeyValuePair<string, string>(de.ToDescription(), de.ToString()));
            }

            MyView.Departments = pairs;

Используются методы расширения для перечисления:

 public static class EnumExtensions
    {
        public static string ToDescription(this Enum en) 
        {
            Type type = en.GetType();

            MemberInfo[] memInfo = type.GetMember(en.ToString());

            if (memInfo != null && memInfo.Length > 0)
            {
                object[] attrs = memInfo[0].GetCustomAttributes(typeof(DescriptionAttribute),false);

                if (attrs != null && attrs.Length > 0)

                    return ((DescriptionAttribute)attrs[0]).Description;
            }

            return en.ToString();
        }

        public static TEnum NumberToEnum<TEnum>(int number )
        {
            return (TEnum)Enum.ToObject(typeof(TEnum), number);
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...