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