Casting in MVVM Light CommandParameterValue
-
23-09-2019 - |
Question
here is my Problem, I want to pass the integer 1 when this canvas is pressed. Every time I click the canvas, I get a An unhandled exception of type 'System.InvalidCastException' occurred in GalaSoft.MvvmLight.dll. Now I could make my life easier and just do the RelayCommand to accept a String instead of int but for the sake of learning. How would i go about doing it this way,
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseLeftButtonDown">
<cmd:EventToCommand Command="{Binding ButtonPress}"
CommandParameterValue="1"
</i:EventTrigger>
</i:Interaction.Triggers>
Solution
You just found a limitation of the generic casting. I am sorry about this. I will try to find a better way to handle simple values in a further version (maybe with some reflection to check if the Parse method is present on the type) and opened a bug in my backlog. In the mean time, please use RelayCommand and do the parsing yourself.
Cheers, Laurent
OTHER TIPS
You can pass datatypes other than string to the command using the following syntax:
<i:EventTrigger EventName="MouseLeftButtonDown">
<cmd:EventToCommand Command="{Binding ButtonPress}">
<cmd:EventToCommand.CommandParameterValue>
<s:Int32>1</s:Int32>
</cmd:EventToCommand.CommandParameterValue>
</cmd:EventToCommand>
</i:EventTrigger>
Add the flowing namespace declaration for s:
xmlns:s="clr-namespace:System;assembly=mscorlib"