2011-01-12 4 views
1

Apollogies для странного названия. Я не знал, как это сделать.IMultiValueConverter + MultiBinding - обратные арифметические вычисления на привязанных к данным значениях?

У меня есть 3 текстовых блока данных, привязанных к некоторым значениям.

Что мне нужно сделать, это иметь значение 1 из текстовых блоков Автоматически вычислять в результате вычисления других 2 текстовых полей.

После некоторого Google'я я обнаружил, что использование интерфейса IMultiValueConverter должно решить мою проблему. Оно делает. Но только один путь.

Например:

TextBox 1 * TextBox 2 = TextBox 3

Но обратное также верно:

TextBox 3/TextBox 2 = TextBox 1

Последнее, что У меня проблемы с завершением. Независимо от того, что я делаю, обратный расчет не будет палкой.

Я реализовал 2 IMultiValueConverters, каждый для 2 TextBoxes (начиная с двух разных вычислений).

Преобразователь 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

Преобразователь 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

Вы увидите, что Возвращаемые значения для методов ConvertBack устанавливается ничего. Это происходит потому, что всякий раз, когда я возвращаю параметр значения, я получаю исключение, говоря, что я не могу преобразовать из строки в одномерный массив.

Что я делаю неправильно?

Любая помощь очень ценится.

Спасибо заранее.

P.S. Я довольно новичок в конвертерах. Я недавно начал играть с ним.

ответ

1

мульти значение преобразования работы, как это:

  1. метод требует Преобразование входных параметров п и преобразовать его в 1 результат. В вашем случае: TextBox 1 + TextBox 2 => TextBox 3
  2. ConvertBack - это обратное: он принимает 1 входной параметр и преобразует его в n результатов. В вашем случае: TextBox 3 => TextBox 1 + TextBox 2

Итак, ваш ConvertBack должен возвращать массив, содержащий значения TextBox1 и TextBox2 ... Если вы хотите обновить только textBox1 для Exemple, вы можете сделать:

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

EDIT: ссылка на MSDN ConvertBack: http://msdn.microsoft.com/en-us/library/system.windows.data.imultivalueconverter.convertback.aspx

+0

Ok как я объяснить это ... Его работы! 100%. Но это странно. Когда вызывается ConvertBack, он получил значение из TextBox 3 и назначил его в TextBox 1. После небольшого поворота я подумал, что, возможно, я могу использовать это в свою пользу. Итак, я затем блок кода из другого конвертера, который я создал, и каким-то образом реализовал его с помощью метода ConvertBack первого конвертера. Теперь, когда изменяются значения TextBox 1, TextBox 2 или TextBox 3, выполняются правильные вычисления. Большое спасибо за Вашу помощь. – GaaTY

 Смежные вопросы

  • Нет связанных вопросов^_^