Wpf i多值转换器+;多重绑定-数据绑定值的反向算术计算?

Wpf i多值转换器+;多重绑定-数据绑定值的反向算术计算?,wpf,multibinding,imultivalueconverter,Wpf,Multibinding,Imultivalueconverter,阿波罗的名字很奇怪。我不知道该怎么说 我有3个文本框数据绑定到一些值 我需要做的是让其中一个文本框的值作为其他两个文本框的计算结果自动计算 在谷歌搜索之后,我发现使用IMultiValueConverter接口应该可以解决我的问题。是的。但只有一条路 例如: 文本框1*文本框2=文本框3 但反过来也是如此: 文本框3/文本框2=文本框1 后者是我在完成时遇到的问题。无论我做什么,反向计算都不会坚持 我已经实现了2个IMultivalueConverter,每个用于2个文本框(因为它有2个不同的计

阿波罗的名字很奇怪。我不知道该怎么说

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

我需要做的是让其中一个文本框的值作为其他两个文本框的计算结果自动计算

在谷歌搜索之后,我发现使用IMultiValueConverter接口应该可以解决我的问题。是的。但只有一条路

例如:

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

但反过来也是如此:

文本框3/文本框2=文本框1

后者是我在完成时遇到的问题。无论我做什么,反向计算都不会坚持

我已经实现了2个IMultivalueConverter,每个用于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参数时,我都会得到一个异常,表示我无法从字符串转换为一维数组

我做错了什么

非常感谢您的帮助

提前谢谢


顺便说一句,我对转换器还比较陌生。我最近才开始使用它。

多值转换的工作原理如下:

  • Convert方法需要n个输入参数并将其转换为1个结果。在您的情况下:textbox1+textbox2=>textbox3
  • ConvertBack则相反:它接受1个输入参数并将其转换为n个结果。在您的情况下:TextBox 3=>TextBox 1+TextBox 2
  • 因此,您的ConvertBack应该返回一个包含TextBox1和TextBox2值的数组。。。 例如,如果只想更新TextBox1,可以执行以下操作:

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

    编辑:链接到MSDN ConvertBack:

    多值转换的工作原理如下:

  • Convert方法需要n个输入参数并将其转换为1个结果。在您的情况下:textbox1+textbox2=>textbox3
  • ConvertBack则相反:它接受1个输入参数并将其转换为n个结果。在您的情况下:TextBox 3=>TextBox 1+TextBox 2
  • 因此,您的ConvertBack应该返回一个包含TextBox1和TextBox2值的数组。。。 例如,如果只想更新TextBox1,可以执行以下操作:

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

    编辑:链接到MSDN ConvertBack:

    Ok我该如何解释这一点。。。它的作品!100%. 但这很奇怪。调用ConvertBack时,它从TextBox 3获取值并将其分配给TextBox 1。在闲逛了一会儿之后,我想也许我可以利用这个优势。然后我从我创建的另一个转换器中提取代码块,并以某种方式使用第一个转换器的ConvertBack方法实现它。现在,当文本框1、文本框2或文本框3的值发生变化时,将进行正确的计算。非常感谢你的帮助。好的,我怎么解释这个。。。它的作品!100%. 但这很奇怪。调用ConvertBack时,它从TextBox 3获取值并将其分配给TextBox 1。在闲逛了一会儿之后,我想也许我可以利用这个优势。然后我从我创建的另一个转换器中提取代码块,并以某种方式使用第一个转换器的ConvertBack方法实现它。现在,当文本框1、文本框2或文本框3的值发生变化时,将进行正确的计算。非常感谢你的帮助。