Bonjour,

je cherche à remplir un Combobox avec l'ensemble des valeurs des DescriptionAttribute d'un type énumération:

Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public enum TimeFormatEnum
    {
        [Description("seconde")]
        s, //seconde
        [Description("minute")]
        m, // minute
        [Description("heure")]
        h, // heure
        [Description("jour")]
        d, // jour
        [Description("semaine")]
        w, // semaine
        [Description("mois")]
        mo, // mois
        [Description("année")]
        y // année
    }

Après quelques recherches, je suis tombé sur quelques solutions intéressantes et notamment celle proposée par TomLev qui consiste à utiliser un MarkupExtension:

Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
<ComboBox Name="cbTime" ItemsSource="{local:EnumValuesExtension local:TimeFormatEnum}" SelectedItem="{Binding  ElementName=ucTR,Path=TRange.Format}" />

Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[MarkupExtensionReturnType(typeof(object[]))]
    public class EnumValuesExtension : MarkupExtension
    {
        public EnumValuesExtension()
        {
        }
 
        public EnumValuesExtension(Type enumType)
        {
            this.EnumType = enumType;
        }
 
        [ConstructorArgument("enumType")]
        public Type EnumType { get; set; }
 
        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            if (this.EnumType == null)
                throw new ArgumentException("The enum type is not set");
 
            return Enum.GetValues(this.EnumType);
        }
    }

Le hic c'est que la méthode ProvideValue retourne les valeurs et j'aimerais retourner les descriptions. Tomlev propose aussi dans la librairie DVP.NET une classe EnumExtensions qui encapsule une classe générique static privée EnumInfoCache. Cette classe possède une propriété retournant l'ensemble des descriptions d'un Enum.
Voici le code de la classe:
EnumExtensions
J'aimerais donc ajouter une méthode static GetDescriptions à la classe EnumExtensions qui retourne la propriété Descriptions de la classe EnumInfoCache.

Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
public static IEnumerable<string> GetDescriptions(Type typeEnum)
        {
        }

Hors la classe EnumInforCache est générique.
Je ne sais pas donc trop comment procéder car on ne peut pas par exemple faire:

Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
public static IEnumerable<string> GetDescriptions(Type typeEnum)
        {
return EnumInfoCache<typeEnum>.Descriptions;
        }

Est-ce que vous auriez des solutions à me proposer ?

Merci d'avance,
Zoax