IMultiValueConverter + MultiBinding - inverse Arithmatic calculs sur des valeurs liés aux données?

StackOverflow https://stackoverflow.com/questions/4666137

Question

Apollogies pour le titre bizarre. Je ne savais pas comment le dire autrement.

Ce que j'est 3 TextBoxes Data-Bound à certaines valeurs.

Qu'est-ce que je dois faire est d'avoir la valeur 1 des TextBoxes calculer automatiquement à la suite d'un calcul des 2 autres zones de texte.

Après quelques Google'ing, je trouve que l'utilisation de l'interface IMultiValueConverter devrait résoudre mon problème. Cela fait. Mais seulement 1 chemin.

Par exemple:

TextBox 1 * 2 = TextBox TextBox 3

Mais l'inverse est également vrai:

TextBox 3/2 = TextBox TextBox 1

Ce dernier est ce que je vais avoir du mal à remplir. Peu importe ce que je fais, le calcul inverse wont bâton.

J'ai mis en 2 IMultiValueConverters, chacun pour les 2 TextBoxes (depuis ses 2 calculs différents).

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

Converter 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

Vous verrez que les valeurs de retour pour les méthodes de ConvertBack est réglé à rien. En effet, chaque fois que je retourne le paramètre de valeur, je reçois une exception disant que je ne peux pas convertir de chaîne en tableau 1 dimensions.

Qu'est-ce que je fais mal?

Toute aide est très appréciée.

Merci à l'avance.

P.S. Je suis assez nouveau pour convertisseurs. Je ne ai commencé à jouer avec elle récemment.

Était-ce utile?

La solution

Une conversion de valeurs multiples fonctionne comme ceci:

  1. la méthode Convert nécessite n paramètres d'entrée et de le convertir en 1 résultat. Dans votre cas: TextBox 1 + 2 = TextBox> TextBox 3
  2. le ConvertBack est l'inverse: il faut une paramètre d'entrée et le convertir en n résultats. Dans votre cas: TextBox 3 => TextBox 1 + 2 TextBox

Ainsi, votre ConvertBack retourne un tableau contenant des valeurs de TextBox1 et TextBox2 ... Si vous souhaitez mettre à jour uniquement pour TextBox1 exemple, vous pouvez faire:

return new object[] { myTextBox1String, Binding.DoNothing };

EDIT: lien vers MSDN ConvertBack: http : //msdn.microsoft.com/en-us/library/system.windows.data.imultivalueconverter.convertback.aspx

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top