Bonjour,
j'essaye de gérer dynamiquement une méthode de filtrage par colonne dans un DataGrid.
Ce que j'essaye de faire, c'est d'appliquer un template à mes DataGridColumnHeader en fonction de la source de donnée de la colonne.
Pour faire simple, si mon objet métier dispose de deux propriété, un string et un entier. Je voudrais que pour la colonne affichant la string, le DataGridColumnHeader affiche un template particulier (contenant une textbox) et que pour la colonne affichant l'int, son DataGridColumnHeader affiche un autre template (contenant une dropdown liste + une textbox. Les deux templates étant définit dans les ressources de l'application.
J'arrive plus ou moins à mes fins en gérant l'évènement AutoGeneratedColumns :
Toutefois, je voudrais être capable de faire la même chose si je ne veux pas générer mes colonnes automatiquement. Je voulais passer par un DataTemplateSelector en définissant la propriété HeaderTemplateSelector de DataGridColumn, mais je me pose la question de comment récupérer le type de la propriété de ma colonne dans mon DataTemplateSelector (de la même manière que dans le code plus haut) quand l'objet que je récupère en redéfinissant SelectTemplate n'est que la chaine de caractère de l'entête de la colonne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 private void This_AutoGeneratedColumns(object sender, DataGridAutoGeneratingColumnEventArgs e) { if (e.PropertyType.Name == "Int32") { e.Column.HeaderTemplate = This.FindResource("intHeader") as DataTemplate; } else { e.Column.HeaderTemplate = This.FindResource("stringHeader") as DataTemplate; } }
J'espère avoir été clair, merci pour votre attention.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 public class DataGridColumnHeaderTemplateSelector : DataTemplateSelector { public override DataTemplate SelectTemplate(object item, DependencyObject container) { /* item contient la chaine de caractère de l'entête de ma colonne. container contient un Contentpresenter dans lequel je suis capable de récupérer le DataGridColumnHeader concerné. Ce que je voudrais faire ici c'est choisir le template en fonction du type de la propriété contenu dans la colonne qui vient d'appeler cette méthode. * */ } }
Edit :
Du coup mon problême se résume à une question.
Est ce que l'on peut récupérer depuis un DataGridColumnHeader ou une DataGridColumn le type de la propriété sur laquelle la colonne est bind ? (string, int32 ...)
Partager