IMultiValueConverter + MultiBinding - Calcoli Reverse arithmatic sui valori Data-Bound?
-
10-10-2019 - |
Domanda
Apollogies per il titolo bizzarro. Non sapevo in quale altro modo per dirla.
Quello che ho è di 3 caselle di testo Data-Bound ad alcuni valori.
Che cosa devo fare è di avere il valore di 1 delle caselle di testo calcolare automaticamente come risultato di un calcolo degli altri 2 caselle di testo.
Dopo qualche Google'ing, ho scoperto che utilizzando l'IMultiValueConverter interfaccia dovrebbe risolvere il mio problema. Lo fa. Ma solo 1 via.
Ad esempio:
TextBox 1 * 2 = TextBox TextBox 3
Ma il vero anche il contrario:
TextBox 3/2 = TextBox TextBox 1
Il secondo è quello che sto avendo problemi con il completamento. Non importa quello che faccio, il bastone di calcolo solito inverso.
Ho implementato 2 IMultiValueConverters, ciascuno per le 2 TextBoxes (dal 2 suoi calcoli diversi).
Converter 1:
Public Class SalaryConverter
Implements IMultiValueConverter
Public Function Convert(ByVal values() As Object, ByVal targetType As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IMultiValueConverter.Convert
Dim salary As Double = 0
salary = (Math.Round(values(0) * (values(1) * 4)))
Return salary.ToString("C")
End Function
Public Function ConvertBack(ByVal value As Object, ByVal targetTypes() As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object() Implements System.Windows.Data.IMultiValueConverter.ConvertBack
Return Nothing
End Function
End Class
Convertitore 2:
Public Class RateConverter
Implements IMultiValueConverter
Public Function Convert(ByVal values() As Object, ByVal targetType As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IMultiValueConverter.Convert
Dim rate As Double = 0
rate = ((values(0) / values(1)) / 4)
Return rate.ToString("C")
End Function
Public Function ConvertBack(ByVal value As Object, ByVal targetTypes() As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object() Implements System.Windows.Data.IMultiValueConverter.ConvertBack
Return Nothing
End Function
End Class
vedrai che i valori restituiti per i metodi ConvertBack è impostato su Nothing. Questo perché ogni volta che torno il parametro value, ottengo un'eccezione dicendo non posso convertire da stringa a matrice 1-dimensionale.
Che cosa sono io che faccio male?
Ogni aiuto è molto apprezzato.
Grazie in anticipo.
P.S. Sono abbastanza nuovo per convertitori. Ho solo iniziato a giocare intorno con esso recentemente.
Soluzione
Un valore convertito a più funziona come questo:
- il metodo Convert richiede n parametri di ingresso e convertirlo in 1 risultato. Nel tuo caso: TextBox 1 + 2 = TextBox> TextBox 3
- il ConvertBack è invertito prende 1 parametro di input e convertirlo in risultati n. Nel tuo caso: TextBox 3 => TextBox 1 + TextBox 2
Così il vostro ConvertBack deve restituire una matrice contenente valori di TextBox1 e TextBox2 ... Se si desidera aggiornare solo TextBox1 per exemple, si può fare:
return new object[] { myTextBox1String, Binding.DoNothing };
EDIT: link a MSDN ConvertBack: http : //msdn.microsoft.com/en-us/library/system.windows.data.imultivalueconverter.convertback.aspx