2009-12-02 8 views
1

J'essaie d'avoir un combo-box pour afficher un ensemble de valeurs prédéfinies - dans ce cas une énumération. Par exemple:WPF: Puis-je lier une énumération à une combo-box?

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

Cependant, je semble échouer à le faire. Est-ce possible? Je suis tenté d'utiliser databinding mais seulement trouvé Mélanger toutes les classes de l'espace de noms, pas ENUM (ce qui est un objet évidemment)

Répondre

1

Bind names ci-dessous pour votre ComboBox:

var names = Enum.GetNames(typeof(Protocol)); 
+0

simple comme cela, qui aurait pensé lol – Maciek

-1

Je ne sais pas à propos de WPF mais dans les webforms (puisque j'utilise MVP) je lie un List> au ddl. Pour obtenir la liste ici est un code

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; 

Il utilise des méthodes d'extension sur le ENUM:

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); 
     } 
    } 
+0

Pourquoi cette voté contre-? Je voudrais vraiment savoir. – epitka

+0

L'OP voulait peupler la liste déroulante avec les noms définis dans l'énumération. Votre solution utilise la réflexion pour rechercher des attributs de description personnalisés sur l'énumération et les lie à la place. Bien que cela puisse être utile, ce n'est pas ce que le PO voulait. –

+0

Comment vous avez réussi à extraire cette information de la question est au-delà de moi. Il dit: "combo-box affiche un ensemble prédéfini de valeurs - dans ce cas une énumération". Il ne précise nulle part qu'il ne doit s'agir que de noms. – epitka

Questions connexes