Bonjour,
voilà j'aurais voulu avoir un petit exemple pour ajouter des items d'une combobox à partir d'un type enum.
Merci d avance!
Version imprimable
Bonjour,
voilà j'aurais voulu avoir un petit exemple pour ajouter des items d'une combobox à partir d'un type enum.
Merci d avance!
va renvoyer un string[] contenant les nom disponibles dans l'enum qui peut être utilisé comme DataSource.Code:
1
2 Enum.GetNames(typeof(MonEnum));
Salut,
voici une méthode pour binder un enum sur une combobox :
le xaml :
tu places cela dans les ressources de ta window :
Code:
1
2
3
4
5
6
7
8
9 <CollectionViewSource x:Key="TypeEnumList"> <CollectionViewSource.Source> <ObjectDataProvider MethodName="GetValues" ObjectType="{x:Type sys:Enum}"> <ObjectDataProvider.MethodParameters> <x:Type TypeName="localvm:TypeEnum"/> </ObjectDataProvider.MethodParameters> </ObjectDataProvider> </CollectionViewSource.Source> </CollectionViewSource>
et la combobox :
Code:
1
2 <ComboBox Name="Cbo_TypeEnum" ItemsSource="{Binding Source={StaticResource TypeEnumList}}" HorizontalAlignment="Left" Width="280">
view model :
Code:
1
2
3
4
5
6 public enum TypeEnum { ALL, RUNTIME, SQL }
Merci bien !!!
Hello,
Sinon :mrgreen: j'ai un petit converter qui va chercher l'attribut Display que tu as placé sur un enum et te renvoit un tuple avec la valeur de l'enum et le texte a affiché. C'est bien pratique et cela s'utilise en fournissant le type de l'enum a utiliser depuis le code :
Code ENUM:
Code:
1
2
3
4
5
6
7
8 public enum MonENum{ [Display(Name="Mon nom a afficher un")] ValeurUne, [Display(Name="Mon nom a afficher deux")] ValeurDeux, }
Code XAML:
Code:
1
2
3
4 <ComboBox ItemsSource="{Binding LeTypeDeLEnum,Converter={StaticResource EnumToDictionnaryConverter}}" DisplayMemberPath="Item2" SelectedValuePath="Item1" SelectedValue="{Binding SelectedObjectOnViewModel,Mode=TwoWay}" />
Code du converter :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 public class EnumToDictionnaryConverter : IValueConverter { private Dictionary<Type, List<Tuple<Object, Object>>> cache = new Dictionary<Type, List<Tuple<Object, Object>>>(); public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { Type type = value as Type; if (!this.cache.ContainsKey(type)) { var fields = type.GetFields().Where(field => field.IsLiteral); var values = new List<Tuple<Object, Object>>(); foreach (var field in fields) { DisplayAttribute[] a = (DisplayAttribute[])field.GetCustomAttributes(typeof(DisplayAttribute), false); if (a != null && a.Length > 0) { Tuple<object, object> newTuple1 = new Tuple<Object, Object>(field.GetValue(value), a[0].Name); values.Add(newTuple1); } else { Tuple<object, object> newTuple = new Tuple<Object, Object>(field.GetValue(value), field.GetValue(value)); values.Add(newTuple); } } this.cache[type] = values; } return this.cache[type]; } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } }
La technique du ObjectDataProvider fonctionne bien, mais c'est un peu lourd...
La librairie Dvp.NET fournit une markup extension EnumValuesExtension qui fait la même chose de façon beaucoup plus compacte :
Code:<ComboBox ItemsSource="{dvp:EnumValues local:MyEnum}" />
Hello,
je me permets de relancer ce (vieux) sujet car j'ai une question sur la réponse de jmix90:
J'ai évidemment remplacé LeTypeDeLEnum par mon type d'énumération. Le compilateur indique (à juste titre) qu'il ne trouve pas la propriété LeTypeDeLEnum sur l'objet lié au DataContext.Citation:
Envoyé par jmix90
Est-ce que c'est la bonne syntaxe ?
Merci d'avance,
Zoax
Il doit falloir mettre un truc du genre:
Code:{x:Type monnamespacexml:montype}
Bonjour,
merci pour les réponses, je vais essayer ça tout de suite.
Justement je suis en train d'essayer les différentes solutions que vous aviez proposé. J'ai d'ailleurs laissé un autre message à ce sujet sur le forum. Tu l'as peut-être vu ?Citation:
Envoyé par tomlev
Zoax.
il y a un article complet sur le sujet : http://www.jonathanantoine.com/2011/...-descriptions/
C'est génial. Super idée.
Merci