IMultiValueConverter + Multibinding - Reverse-Arithmatic Berechnungen auf datengebundenen Werte?

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

Frage

Apollogies für den seltsamen Titel. Ich weiß nicht, wie du es sonst setzen.

Was ich habe, ist 3 Textfelder datengebundenen auf einige Werte.

Was brauchen i berechnen zu tun haben, den Wert von 1 der Textfelder automatisch als Ergebnis einer Berechnung der anderen zwei Textfelder.

Nach einigem Google'ing, ich fand, dass die IMultiValueConverter Interface sollte mein Problem lösen. Es tut. Aber nur 1 Weg.

Zum Beispiel:

TextBox 1 * TextBox 2 = TextBox 3

Aber das gilt auch umgekehrt:

TextBox 3 / TextBox 2 = TextBox 1

Letzteres ist das, was Ich habe Probleme mit Abschluss. Egal, was ich tue, der umgekehrten Berechnung wird nicht Stick.

Ich habe Implementiert 2 IMultiValueConverters, die jeweils für die 2 Textfelder (seit seinen 2 verschiedenen Berechnungen).

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

Sie werden sehen, dass die Rückgabewerte für die ConvertBack Methoden auf Nothing festgelegt wird. Dies liegt daran, wenn ich den Wert Parameter zurückgeben, ich eine Ausnahme erhalten sagen, ich von String 1-dimensionalen Array konvertieren kann nicht.

Was mache ich falsch?

Jede Hilfe ist sehr geschätzt.

Vielen Dank im Voraus.

P. S. Ich bin ziemlich neu in Converters. Ich erst vor kurzem begonnen, mit ihm herumspielen.

War es hilfreich?

Lösung

Ein Mehrwert convert funktioniert wie folgt aus:

  1. das Konvertieren Methode erfordert n Eingangsparameter und wandelt sie in 1 Ergebnis. In Ihrem Fall: TextBox 1 + TextBox 2 => TextBox 3
  2. der ConvertBack das Gegenteil: es dauert 1 Eingangsparameter und wandelt es in n Ergebnisse. In Ihrem Fall: TextBox 3 => TextBox 1 + TextBox 2

So Ihr ConvertBack sollte eine Array Rückgabewert von TextBox1 und TextBox2 enthält ... Wenn Sie nur TextBox1 für exemple aktualisieren möchten, können Sie dies tun:

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

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top