2011-01-12 56 views
1

奇怪的標題apollogies。我不知道該怎麼說。IMultiValueConverter + MultiBinding - 對數據綁定值進行反向算術計算?

我有什麼是3文本框數據綁定到一些值。

我需要做的是將TextBoxes的值作爲其他2個文本框的計算結果自動計算。

Google'ing後,我發現使用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方法的返回值被設置到無。這是因爲每當我返回值參數,我得到一個異常說,我不能從字符串轉換爲1維數組。

我在做什麼錯了?

任何幫助,非常感謝。

在此先感謝。

P.S.我對轉換器相當陌生。我最近纔開始玩這個遊戲。

回答

1

的多值轉換作品作爲這樣的:

  1. 轉換方法需要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

+0

好吧我怎麼解釋這個...它的作品! 100%。但它很奇怪。當調用ConvertBack時,它從TextBox 3中取值並將其分配給TextBox 1.在擺弄了一下之後,我想也許我可以利用它來獲得我的優勢。所以我然後從我創建的另一個轉換器的代碼塊,並以某種方式與第一個轉換器的ConvertBack方法實現它。現在當TextBox 1,TextBox 2或TextBox 3的值發生變化時,就會進行正確的計算。非常感謝您的幫助。 – GaaTY