Question

Je ne parviens pas à obtenir un événement de clic à déclencher une fois la commande exécutée. J'essaie de suivre le style de développement MVVM.

Voici le scénario:

Dans mon application, j'ai une grille de 2 par N boutons, où N est un ensemble de boutons chargé dynamiquement (parfois ce sera 2 x 2, parfois 5 x 9, je ne sais pas). Initialement, toutes les colonnes de boutons seront masquées sauf la première colonne. Lorsque vous cliquez sur la première colonne, une commande est exécutée, une animation en fondu est lue et affiche certains boutons de la deuxième colonne, en fonction du bouton sur lequel vous avez cliqué dans la première colonne. Par exemple, cliquer sur le bouton du haut dans la première colonne révélera les quatre premiers boutons de la deuxième colonne, tandis que le bouton du bas dans la première colonne affichera les trois premiers boutons de la deuxième colonne.

Voici le problème:

Pour chaque bouton, j'ai défini un paramètre CommandParameter sur chacun des boutons de la première colonne. Lorsque la commande est exécutée, les données sont traitées et une propriété est définie dans la VM, indiquant quel bouton a été enfoncé (j'utilise à nouveau le CommandParameter). Pendant le traitement des données, je souhaite afficher la prochaine série de boutons à l'utilisateur. J'ai un événement click qui prend le CommandParameter de la machine virtuelle et lit une animation pour afficher les boutons appropriés.

Cependant, le problème est que WPF aime faire l'événement Click avant que la commande ne soit déclenchée. Ceci est un problème car la propriété dans la VM qui dit quel bouton a été cliqué n'est pas définie!

Cela m'amène donc à quelques questions ...

1) Y a-t-il un moyen d'exécuter la commande avant de déclencher l'événement?

2) Est-ce que je le fais bien? : P

Était-ce utile?

La solution

Au lieu d'utiliser un gestionnaire d'événements click, vous pouvez simplement configurer DataTriggers sur vos boutons.

Ils peuvent répondre à la propriété dans votre ViewModel, masquant les boutons que vous ne souhaitez pas afficher et affichant le bouton que vous avez créé.

La bonne chose à ce sujet est que votre vue peut être entièrement réalisée en XAML, et le ViewModel ne fait que définir l'état (c'est-à-dire: je suis dans cet état), et la vue restera automatiquement mise à jour car la liaison entraînera la nouveau DataTrigger à déclencher.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top