Casting in MVVM Luce CommandParameterValue
-
23-09-2019 - |
Domanda
qui è il mio problema, io voglio passare l'intero 1 quando si preme questa tela. Ogni volta che clicco la tela, ho un Un'eccezione non gestita di tipo 'System.InvalidCastException' in GalaSoft.MvvmLight.dll. Ora ho potuto fare la mia vita più facile e solo fare il RelayCommand di accettare una stringa invece di int, ma per il bene di apprendimento. Come potrei fare per fare in questo modo,
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseLeftButtonDown">
<cmd:EventToCommand Command="{Binding ButtonPress}"
CommandParameterValue="1"
</i:EventTrigger>
</i:Interaction.Triggers>
Soluzione
Hai appena trovato una limitazione del getto generico. Mi dispiace per questo. Cercherò di trovare un modo migliore per gestire i valori semplici in un'ulteriore versione (magari con qualche riflessione per verificare se il metodo Parse è presente sul tipo) e ha aperto un bug nel mio portafoglio. Nel frattempo, si prega di utilizzare RelayCommand e fare il parsing da soli.
Saluti, Laurent
Altri suggerimenti
È possibile passare i tipi di dati diversi da stringa al comando utilizzando la seguente sintassi:
<i:EventTrigger EventName="MouseLeftButtonDown">
<cmd:EventToCommand Command="{Binding ButtonPress}">
<cmd:EventToCommand.CommandParameterValue>
<s:Int32>1</s:Int32>
</cmd:EventToCommand.CommandParameterValue>
</cmd:EventToCommand>
</i:EventTrigger>
Aggiungere la dichiarazione dello spazio dei nomi che scorre per s:
xmlns:s="clr-namespace:System;assembly=mscorlib"