【问题标题】:IMultiValueConverter + MultiBinding - Reverse Arithmatic Calculations on Data-Bound Values?IMul​​tiValueConverter + MultiBinding - 数据绑定值的反向算术计算?
【发布时间】:2011-06-07 15:48:27
【问题描述】:

为这个奇怪的标题道歉。我不知道该怎么说。

我有 3 个文本框数据绑定到某些值。

我需要做的是让 TextBoxes 的 1 的值作为其他 2 个文本框的计算结果自动计算。

经过一番谷歌,我发现使用 IMultiValueConverter 接口应该可以解决我的问题。确实如此。但只有一种方式。

例如:

文本框 1 * 文本框 2 = 文本框 3

但反过来也是如此:

文本框 3 / 文本框 2 = 文本框 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 方法的返回值设置为 Nothing。这是因为每当我返回 value 参数时,我都会收到一个异常,说我无法从字符串转换为一维数组。

我做错了什么?

非常感谢任何帮助。

提前致谢。

附:我对转换器相当陌生。我最近才开始玩它。

【问题讨论】:

    标签: wpf multibinding imultivalueconverter


    【解决方案1】:

    多值转换是这样工作的:

    1. Convert 方法需要 n 个输入参数并将其转换为 1 个结果。在您的情况下:TextBox 1 + TextBox 2 => TextBox 3
    2. ConvertBack 是相反的:它接受 1 个输入参数并将其转换为 n 个结果。在您的情况下:TextBox 3 => TextBox 1 + TextBox 2

    所以你的 ConvertBack 应该返回一个包含 TextBox1 和 TextBox2 值的数组... 例如,如果您只想更新 TextBox1,您可以这样做:

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

    编辑:链接到 MSDN ConvertBack:http://msdn.microsoft.com/en-us/library/system.windows.data.imultivalueconverter.convertback.aspx

    【讨论】:

    • 好的,我该如何解释...它的作品! 100%。但它很奇怪。当调用 ConvertBack 时,它从 TextBox 3 中获取值并将其分配给 TextBox 1。在摆弄了一下之后,我想也许我可以利用它来发挥我的优势。所以我然后是我创建的另一个转换器的代码块,并以某种方式使用第一个转换器的 ConvertBack 方法实现了它。现在,当 TextBox 1、TextBox 2 或 TextBox 3 的值发生变化时,就会进行正确的计算。非常感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多