2011-07-01 1 views
2

ViewModelでプロパティを使用するタイミングと変換を使用するタイミングについて、数回の議論がありました。MVVMでは、使用されているコンバーターとコンバーターのどちらをコンバーターにする必要がありますか?

ときのコンバーターを使用します。それは他の場所で再利用することができます

  • それはパラメータ値に基づいて、このようなトグルボタンを選択するなどのUI関連のアクションです
  • (偉大な例はIsVisibilityConverterです)
  • パラメータが必要とされていない場合や、ViewModelにプロパティを使用して、静的な値

ことができます。

値が別の特性に依存
  • :それはユニットにする必要がある(例えば、秒単位で示した期間は、ユーザがacomboボックス、時間、分、秒で選択したかに依存します)
  • にPropertyChangedイベントをテストして変更することができます値

編集:私は主にSilverlightで作業することを言及する必要があります。だから、私はボックスの外にマルチバインディングコンバータを持っていないし、パラメータへのバインディングは動作しません(私はそれがWPFで行うと思います)。 あなたの考えは?

+0

いいえ、WPFでコンバータパラメータをバインドすることはできません... –

答えて

3

一般に、私はIValueConverterを「純粋な見解」のものと考えるようにしています。この場合、再利用可能なビューコードでなければなりません。 (IMultiValueConverterを使用して、「パラメータ」が必要なシナリオの多くを処理することもできます(純粋なビューに関連するものであれば...)

ViewModelはアプリケーション固有のロジックです。あなたのドメインに固有の状態に依存しているものがあれば、それを直接ViewModelの内部に置くことにします。

1

一般的に使用されているBooleanToVisibilityConvertorのように、コンバーターの一般的な使い方の1つは再利用です。他の用途は、特定のものを表示する場合です。例えば、あなたのモデルでは、量のような小数または整数値を持つかもしれません。しかし、ビューでは$ 10,000,000.00のような書式付きの金額を表示したいと考えています。この場合、値コンバーターを使用できます。もう1つのケースでは、格付けコントロールのような異なるフォーマットでデータを表示し、異なる表現をUIに表示しながら異なる方法でデータベースに格納することができます。

日付はバリューコンバーターを使用できるもう1つの一般的な場所です。アプリケーションに関するアプリケーションの相対的な情報を表示するシナリオを想像してみてください。現在のデータとタスクに関連付けられた日付に基づいて、今日、明日、今週、今月など発生した、または過去に発生したような異なるステータスを表示することができます。

モデルの値とビューに表示する必要がある値の間に変換が必要ない場合は、プロパティを使用します。

関連する問題