Bonjour,
voilà j'aurais voulu avoir un petit exemple pour ajouter des items d'une combobox à partir d'un type enum.
Merci d avance!
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 xaml : Sélectionner tout - Visualiser dans une fenêtre à part
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 xaml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <ComboBox Name="Cbo_TypeEnum" ItemsSource="{Binding Source={StaticResource TypeEnumList}}" HorizontalAlignment="Left" Width="280">
view model :
Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public enum TypeEnum { ALL, RUNTIME, SQL }
Merci bien !!!
Hello,
Sinonj'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 C# : Sélectionner tout - Visualiser dans une fenêtre à part
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 XML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <ComboBox ItemsSource="{Binding LeTypeDeLEnum,Converter={StaticResource EnumToDictionnaryConverter}}" DisplayMemberPath="Item2" SelectedValuePath="Item1" SelectedValue="{Binding SelectedObjectOnViewModel,Mode=TwoWay}" />
Code du converter :
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
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 XML : Sélectionner tout - Visualiser dans une fenêtre à part <ComboBox ItemsSource="{dvp:EnumValues local:MyEnum}" />
Pas de questions techniques par MP ! Le forum est là pour ça...
Tutoriels : Les nouveautés de C# 6 - Accès aux données avec Dapper - Extraction de données de pages web à l'aide de HTML Agility Pack - La sérialisation XML avec .NET (Aller plus loin) - Les markup extensions en WPF
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.Envoyé par jmix90
Est-ce que c'est la bonne syntaxe ?
Merci d'avance,
Zoax
Il doit falloir mettre un truc du genre:
Code : Sélectionner tout - Visualiser dans une fenêtre à part {x:Type monnamespacexml:montype}
Retrouvez moi sur :
Mon Espace Developpez.com-------------------------------
Dvp.NET, une librairie open-source de composants .NET
Mon blog: Up there in the code----------------------------
Twitter: NatMarchand
Ma société: So@t
Showrizo : Suivez votre planning de séries télé sous Windows 8
Pas de questions techniques par MP ! Le forum est là pour ça...
Tutoriels : Les nouveautés de C# 6 - Accès aux données avec Dapper - Extraction de données de pages web à l'aide de HTML Agility Pack - La sérialisation XML avec .NET (Aller plus loin) - Les markup extensions en WPF
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 ?Envoyé par tomlev
Zoax.
Pas de questions techniques par MP ! Le forum est là pour ça...
Tutoriels : Les nouveautés de C# 6 - Accès aux données avec Dapper - Extraction de données de pages web à l'aide de HTML Agility Pack - La sérialisation XML avec .NET (Aller plus loin) - Les markup extensions en WPF
il y a un article complet sur le sujet : http://www.jonathanantoine.com/2011/...-descriptions/
C'est génial. Super idée.
Merci
Partager