178 votes

Passant deux paramètres de la commande à l’aide d’une liaison de WPF

J'ai une commande qui je suis d'exécution à partir de mon fichier XAML suivant la syntaxe standard:

<Button Content="Zoom" Command="{Binding MyViewModel.ZoomCommand}"/>

Cela fonctionnait bien jusqu'à ce que j'ai réalisé que j'avais besoin de DEUX morceaux de l'information à partir de la vue afin de faire cette opération complète de la manière dont les utilisateurs s'attendent (la largeur et la hauteur de la toile specfically).

Il me semble qu'il est possible de passer un tableau en argument à mon commandement, mais je ne vois pas qu'il y ait un moyen de spécifier la liaison de ma toile de deux propriétés dans le CommandParameter:

<Button Content="Zoom" Command="{Binding MyViewModel.ZoomCommand" CommandParameter={Binding ElementName=MyCanvas, Path=Width}"/>

Comment puis-je passer à la fois la Largeur et la Hauteur de ma commande? Il ne semble pas que cela est possible à l'aide des commandes à partir de XAML et j'ai besoin de câbler un gestionnaire de clic dans mon code pour obtenir cette information à transmettre à mon zoom méthode.

285voto

Kent Boogaart Points 97432

Tout d’abord, si vous faites MVVM vous généralement aurait cette information disponible pour votre machine virtuelle par l’intermédiaire des propriétés distinctes lié à partir de la vue. Qui sauve vous devoir passer tous les paramètres du tout à vos commandes.

Cependant, vous pourriez également lier multiples et utilisez un convertisseur pour créer les paramètres :

Dans votre convertisseur :

Puis, dans la logique d’exécution de votre commande :

41voto

Daniel Points 825

Dans le convertisseur de la solution choisie, vous devez ajouter les valeurs. Clone() autrement les paramètres dans la commande de fin null

15voto

Melinda Points 101

Utiliser Tuple dans convertisseur et OnExecute, convertissez l’objet de paramètre retour au Tuple.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X