IMultiValueConverter + MultiBinding - inverse Arithmatic calculs sur des valeurs liés aux données?
-
10-10-2019 - |
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.
La solution
Une conversion de valeurs multiples fonctionne comme ceci:
- 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
- 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