Coulée dans MVVM Lumière CommandParameterValue
-
23-09-2019 - |
Question
Voici mon problème, je veux passer l'entier 1 lorsque cette toile est pressée. Chaque fois que je clique sur la toile, je reçois une Une exception non gérée de type « System.InvalidCastException » a eu lieu dans GalaSoft.MvvmLight.dll. Maintenant, je pourrais me rendre la vie plus facile et juste faire le RelayCommand d'accepter une chaîne au lieu de int, mais pour l'amour de l'apprentissage. Comment puis-je aller à ce faire de cette façon,
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseLeftButtonDown">
<cmd:EventToCommand Command="{Binding ButtonPress}"
CommandParameterValue="1"
</i:EventTrigger>
</i:Interaction.Triggers>
La solution
Vous venez de trouver une limitation de la coulée générique. Je suis désolé à ce sujet. Je vais essayer de trouver une meilleure façon de gérer les valeurs simples dans une autre version (peut-être avec un peu de réflexion pour vérifier si la méthode Parse est présent sur le type) et a ouvert un bug dans mon carnet. Dans le même temps, s'il vous plaît utiliser RelayCommand et faire vous-même l'analyse syntaxique.
Cordialement, Laurent
Autres conseils
Vous pouvez passer d'autres types de données que chaîne à la commande en utilisant la syntaxe suivante:
<i:EventTrigger EventName="MouseLeftButtonDown">
<cmd:EventToCommand Command="{Binding ButtonPress}">
<cmd:EventToCommand.CommandParameterValue>
<s:Int32>1</s:Int32>
</cmd:EventToCommand.CommandParameterValue>
</cmd:EventToCommand>
</i:EventTrigger>
Ajoutez la déclaration d'espace de noms pour fluide s:
xmlns:s="clr-namespace:System;assembly=mscorlib"