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.

È stato utile?

Soluzione

Un valore convertito a più funziona come questo:

  1. il metodo Convert richiede n parametri di ingresso e convertirlo in 1 risultato. Nel tuo caso: TextBox 1 + 2 = TextBox> TextBox 3
  2. 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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top