2012-08-10 3 views
2

Veuillez patienter avec moi pour la longueur de cette question, j'ai essayé d'être aussi descriptif que possible. Je suis nouveau à la programmation WPF. Essentiellement, j'essaye de construire le :Essayer de construire un contrôle Query Builder dans WPF

RadDataFilter est utilisé pour filtrer la collection en construisant l'expression de requête. Le contrôle est généralement utilisé en amenant toutes les données de la base de données, puis en les filtrant.

Cependant, j'essaie de l'utiliser pour construire l'expression de requête SQL puis J'interroge la base de données pour récupérer les données. Notre société a une licence pour les produits Telerik, j'ai donc dû essayer et utiliser le contrôle. Malheureusement, le contrôle n'est pas flexible dans la mesure où je voudrais customize the Left Dropdown (RadComboBox).

Comme nous avons plusieurs éléments sur lesquels les utilisateurs peuvent filtrer, il n'est pas possible de leur fournir un seul dropdpwn. Je voudrais avoir un contrôle personnalisé au lieu de la liste déroulante.

J'ai la solution suivante à ce problème:

  • Extrait du modèle pour que le contrôle et la remplacer dans mon XAML comme décrit here. Cependant, malgré cela, je suis incapable de changer le contrôle. Je suppose que c'est dû à ma connaissance insuffisante dans WPF. Essayez de changer le code source pour Telerik (Nous avons également la licence pour le code). Cependant, avec cette approche, nous devons continuer à apporter des modifications à chaque mise à niveau, ce qui représente une grande maintenance pour l'équipe.

  • Essayez de créer un contrôle personnalisé.

Je suis à la recherche de la 3ème approche. S'il y a un moyen facile (en utilisant les deux premières approches) ou toute autre solution pour y parvenir, s'il vous plaît faites le moi savoir et je vais essayer.

Pour implémenter la 3ème approche, je pense à utiliser un TreeView avec chaque noeud en utilisant un ControlTemplate (contenant mon Custom Control). Je vais remplacer la méthode ToString() du contrôle personnalisé qui me donne la condition d'une requête. Une fois cela fait, je voudrais parcourir les enfants du nœud racine pour construire l'expression de la requête finale.

Cependant, comme je le remarque, nous avons besoin de 2 ControlTemplates différents (un qui permet de créer une expression de filtre et l'autre avec l'opérateur, similaire à RadDataFilter). Je ne sais pas comment définir plusieurs modèles comme celui-ci. Cela peut sembler simple pour certains des développeurs, mais je suis vraiment novice en programmation C# et WPF et j'aurais besoin de temps et d'expérience pour être à l'aise avec ça.

S'il vous plaît laissez-moi savoir si vous connaissez une autre solution que je peux essayer de résoudre ce problème. Si vous pensez qu'il est préférable de créer un contrôle personnalisé, veuillez me guider sur la meilleure façon de l'implémenter. Commentez également mon approche pour créer le contrôle personnalisé.

Merci!

Répondre

1

Je l'ai résolu. A suivi la première approche:

"Extraire le modèle pour ce contrôle et le remplacer dans mon code XAML comme décrit here .."