Bonjour,
je cherche à remplir un Combobox avec l'ensemble des valeurs des DescriptionAttribute d'un type énumération:
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:
<ComboBox Name="cbTime" ItemsSource="{local:EnumValuesExtension local:TimeFormatEnum}" SelectedItem="{Binding ElementName=ucTR,Path=TRange.Format}" />
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.
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:
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
Partager