2011-01-12 5 views
1

Apollogies für den seltsamen Titel. Ich wusste nicht, wie ich es anders ausdrücken sollte.IMultiValueConverter + MultiBinding - Reverse Arithmatische Berechnungen auf Daten gebundene Werte?

Was ich habe, ist 3 TextBoxen Data-Bound zu einigen Werten.

Was ich tun muss, ist der Wert von 1 der TextBoxes automatisch berechnen als Ergebnis einer Berechnung der anderen 2 Textfelder.

Nach einigen Google's habe ich festgestellt, dass die Verwendung der IMultiValueConverter-Schnittstelle mein Problem lösen sollte. 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 dem Abschluss. Egal, was ich mache, die umgekehrte Berechnung wird nicht haften.

Ich habe 2 IMultiValueConverter implementiert, jeweils für die 2 TextBoxen (seit den 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 gesetzt nichts. Dies liegt daran, dass, wenn ich den Wert-Parameter zurückgebe, ich eine Ausnahme bekomme, die besagt, dass ich nicht vom String zum 1-dimensionalen Array konvertieren kann.

Was mache ich falsch?

Jede Hilfe wird sehr geschätzt.

Vielen Dank im Voraus.

P.S. Ich bin neu bei Konvertern. Ich habe erst kürzlich mit dem Spielen angefangen.

Antwort

1

Ein Mehrwert umwandeln funktioniert wie folgt:

  1. das Konvertieren Methode erfordert Parameter n Eingabe und es in 1 Ergebnis umwandeln. In Ihrem Fall: TextBox 1 + TextBox 2 => TextBox 3
  2. Das ConvertBack ist das Gegenteil: es dauert 1 Eingabeparameter und konvertiert es in n Ergebnisse. In Ihrem Fall: TextBox 3 => TextBox 1 + TextBox 2

So sollte Ihr ConvertBack ein Array mit den Werten von TextBox1 und TextBox2 zurückgeben ... Wenn Sie nur TextBox1 für exemple aktualisieren möchten, können Sie 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

+0

Ok Wie erkläre ich dies ... Seine Werke! 100%. Aber es ist komisch. Wenn ConvertBack aufgerufen wird, hat es den Wert von TextBox 3 übernommen und TextBox 1 zugewiesen. Nachdem ich ein bisschen herumgespielt habe, dachte ich, dass ich das vielleicht zu meinem Vorteil nutzen könnte. Also habe ich dann den Codeblock von dem anderen Konverter erstellt und irgendwie mit der ConvertBack-Methode des 1. Konverters implementiert. Wenn nun Werte von TextBox 1, TextBox 2 oder TextBox 3 geändert werden, werden die richtigen Berechnungen vorgenommen. Vielen Dank für Ihre Hilfe. – GaaTY

Verwandte Themen