ImultivalueConverter + Multibinding - обратные арифматические расчеты по значениям, связанным с данными?

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

Вопрос

Аполлогии для странного названия. Я не знал, как еще это выразить.

Что у меня есть, так это 3 Textboxes Data Data к некоторым значениям.

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

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

Например:

Textbox 1 * Textbox 2 = Textbox 3

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

Textbox 3 / Textbox 2 = Textbox 1

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

Я внедрил 2 ImultivalueConverters, каждый для 2 текстовых поле (с тех пор, как 2 его различных вычисления).

Конвертер 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

Конечный класс

Конвертер 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

Конечный класс

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

Что я делаю не так?

Буду признателен за любую оказанную помощь.

Заранее спасибо.

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

Это было полезно?

Решение

Многозначный конвертирование работает так:

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

Таким образом, ваш Convertback должен вернуть массив, содержащий значения TextBox1 и TextBox2 ... Если вы хотите обновить только TextBox1 для Exmple, вы можете сделать:

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

РЕДАКТИРОВАТЬ: Ссылка на MSDN Convertback: http://msdn.microsoft.com/en-us/library/system.windows.data.imultivelueconverter.convertback.aspx

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top