Question

Apollogies for the weird title. I didnt know how else to put it.

What i have is 3 TextBoxes Data-Bound to some values.

What i need to do is have the value of 1 of the TextBoxes Automatically compute as a result of a calculation of the other 2 textboxes.

After some Google'ing, i found that using the IMultiValueConverter Interface should solve my problem. It does. But only 1 way.

For example:

TextBox 1 * TextBox 2 = TextBox 3

But the reverse is also true:

TextBox 3 / TextBox 2 = TextBox 1

The latter is what i'm having trouble with completing. No matter what i do, the reverse calculation wont stick.

I've Implemented 2 IMultiValueConverters, each for the 2 TextBoxes(since its 2 different calculations).

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

You'll see that the Return values for the ConvertBack methods is set to Nothing. This is because whenever i return the value parameter, i get an exception saying i cant convert from string to 1-dimensional array.

What am i doing wrong?

Any help is much appreciated.

Thanks in Advance.

P.S. I am fairly new to Converters. I only started playing around with it recently.

Was it helpful?

Solution

A multi value convert works as this :

  1. the Convert method requires n input parameters and convert it into 1 result. In your case : TextBox 1 + TextBox 2 => TextBox 3
  2. the ConvertBack is the reverse : it takes 1 input parameter and convert it into n results. In your case : TextBox 3 => TextBox 1 + TextBox 2

So your ConvertBack should return an array containing values of TextBox1 and TextBox2... If you want to update only TextBox1 for exemple, you can do :

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

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

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top