3

(デフォルトで) 10 進数値を取るテキスト ボックスを含むフォームがあります。残念ながら、ビジネス ルールでは、パーセンテージ値を使用することもできます (実質的に同じで、100 を掛けただけです)。正しい値が db に挿入されるようにするために (たとえば、回答者が 95 を入力した場合、.95 にしたい)、関連する TextBoxes の横にチェックボックスを追加しました。これをユーザーが選択して、値が小数ではなくパーセンテージ。将来の表示、レポートなどのために小数とパーセントの間で値を切り替えるために、IValueConverter を使用しようとしています。

フィールド値を乗算してパーセンテージで表示するコンバーターを作成しましたが、(まだテストはしていませんが) 保存時にその表示値を小数に再変換する必要があります。

私が抱えている問題は、チェックボックスが選択されている場所でのみコンバーターが機能するようにすることです。私のすべての読書から、これを行う最も可能性の高い方法は、チェックボックスの値を IValueConverter のパラメーターとして使用することだと思われますが、これを行う方法がわかりません。

したがって、私の質問は次のとおり です。TextBox の隣にある Checkbox の Checkbox.IsChecked 値を IValueConverter のパラメーターとして使用して、TextBox テキストで変換を行うかどうかを決定するにはどうすればよいですか (または、できるでしょうか)。問題は、変換される TextBox に関連する Checkbox を識別する方法と、その値を IValueConverter のパラメーターとして渡す方法です。

私はここで探してみました: How can I pass a reference to another control as an IValueConverter parameter? 、しかし、それは少し憂鬱になりました。

前もって感謝します。

4

2 に答える 2

2

残念ながら、ConverterParameter で Binding を使用することはできませんが、このタスクにはIMultiValueConverterを使用できます。

あなたはそれを次のように使用します

<TextBlock.Text>
  <MultiBinding Converter="{StaticResource YourConverter}">
    <Binding Path="YourDecimalProperty"/>
    <Binding Path="IsChecked" ElementName="YourCheckBoxName" />
  </MultiBinding>
</TextBlock.Text>
于 2013-01-10T07:58:26.437 に答える
0

まず第一に、コントロール (ビュー) をコンバーターに渡すべきではありません。IsChecked プロパティの値を渡すだけで十分です。

残念ながら、これは DependencyProperty ではないため、ConverterParameter を DataBind することはできません。回避策として、IsChecked プロパティを ViewModel のプロパティにバインドし、ValueConverter を使用して Textbox を ViewModel 全体にバインドすることができます。その後、ValueConverter で ViewModel にアクセスし、書式設定を行うことができます。

于 2013-01-10T07:53:14.667 に答える