1

奇妙なタイトルの謝罪。私はそれを他に置く方法を知りませんでした。

私が持っているのは3つのTextBoxesデータです-いくつかの値にバインドされています。

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

いくつかのグーグルの後で、私はIMultiValueConverterインターフェースを使用することが私の問題を解決するはずであることに気づきました。します。しかし、1つの方法だけです。

例えば:

TextBox 1 * TextBox 2 = TextBox 3

しかし、その逆も当てはまります。

TextBox 3 / TextBox 2 = TextBox 1

後者は私が完了するのに苦労しているものです。私が何をしても、逆の計算は固執しません。

それぞれ2つのTextBoxに2つのIMultiValueConvertersを実装しました(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パラメータを返すたびに、文字列から1次元配列に変換できないという例外が発生するためです。

私は何が間違っているのですか?

どんな助けでも大歓迎です。

前もって感謝します。

PS私はコンバーターにかなり慣れていません。私は最近それをいじり始めたばかりです。

4

1 に答える 1

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

于 2011-01-12T09:53:31.673 に答える