2011-01-12 7 views
1

奇妙なタイトルのためのApollogies。私は他にそれを置く方法を知らなかった。IMultiValueConverter + MultiBinding - データバインド値の逆算術計算?

私が持っているものは3つのテキストボックスデータバインドされたいくつかの値です。

私がする必要があるのは、他の2つのテキストボックスの計算の結果としてTextBoxesの1の値を自動的に計算することです。

Googleが行った後、IMultiValueConverterインターフェイスを使用すると問題が解決するはずです。します。しかし、唯一の方法です。例えば

テキストボックス1 *テキストボックス2 =テキストボックス3

その逆もまた真である:

テキストボックス3 /テキストボックス2 =テキストボックス1

後者は何か私は完了に問題があります。私が何をするにしても、逆の計算は固執しません。

私は2つのテキストボックス(それぞれ2つの異なる計算があるため)の2つのIMultiValueConvertersを実装しました。

コンバータ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に。これは、値のパラメータを返すたびに、文字列から1次元配列に変換できないという例外が発生するためです。

私は間違っていますか?

ご迷惑をおかけして申し訳ありません。

ありがとうございました。

P.S.私はConvertersにとってかなり新しいです。私は最近それを使って遊んで始めました。

答えて

1

多値は、このような作品を変換:

  1. 変換方法は、n個の入力パラメータを必要とし、1つの結果に変換します。あなたの場合:テキストボックス1 +テキストボックス2 =>テキストボックス3
  2. ConvertBackは逆です:1つの入力パラメータを取り、それをn個の結果に変換します。あなたの場合:TextBox 3 => TextBox 1 + TextBox 2

したがって、ConvertBackはTextBox1とTextBox2の値を含む配列を返します。 あなたがexempleのための唯一のTextBox1を更新したい場合は、行うことができます:

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

EDIT:MSDN ConvertBackへのリンク:http://msdn.microsoft.com/en-us/library/system.windows.data.imultivalueconverter.convertback.aspx

+0

[OK]をどのように私はこれを説明します...その作品を! 100%。しかし、その奇妙な。 ConvertBackが呼び出されると、TextBox 3から値が取得され、TextBox 1に割り当てられました。ちょっと動き回ると、私はこれを私の利点に使うことができると思いました。だから私は、他のコンバータ私は、コードのブロックを作成し、何とか最初のコンバーターのConvertBackメソッドで実装しました。 TextBox 1、TextBox 2またはTextBox 3の値が変更されると、正しい計算が行われます。ご助力ありがとうございます。 – GaaTY