1

私のシナリオでは、その一部としていくつかのフィルターオプションを含む多くのビュー(UserControls)があります。たとえば、合計10個のフィルターオプションがありますが、すべてのビューに10個すべてのフィルターオプションが表示されているわけではないとします。それらのいくつかは3つだけを表示し、いくつかは8などを表示します。重要なことは、1つのビューに1つのフィルターオプションが設定されている場合、このフィルターオプションを含むすべてのビューが同じ値を持つ必要があるということです。

AView: filterOption1, FilterOption2, FilterOption3
BView: filterOption1, FilterOption3, FilterOption5
CView: filterOption2, FilterOption4, FilterOption6, FilterOption7

ユーザーがAViewfilterOption1= Trueを設定する場合、filterOption1を使用するすべてのビュー(BViewなど)に同じ値を設定する必要があります。これにより、共通(共有)データを含み、その中のすべてのフィルターオプションを公開し、すべてのビューをこのCommonViewModelにバインドする1つのCommonViewModel(シングルトン)を使用することにしました。

特定のビューのフィルターオプションを表示するために、2つのアプローチを考えることができます。

1)1つのCommonViewを設計し、表現ごとに新しいインスタンスを作成し、不要な場所でフィルターオプションを非表示にします

<DataTemplate DataType="vm:CommonViewModel">
  <vw:CommonView ShowFilterOption1="True" ShowFilterOption3="True" />
</DataTemplate>

2)異なる表現ごとに個別のビューを設計します(異なるフィルターオプション)

これらのアプローチについてどう思いますか、どちらを好みますか、他にいくつかのアイデアがありますか、適切なMVVM設計に従うための最良の選択は何ですか?

4

2 に答える 2

1

n個のビューが1つのビューモデルにバインドされ、ビューモデルのプロパティが変更されると、ビューは更新されます=そのプロパティに双方向でバインドされます

1)すべてのフィルターオプションを含む1つのビューは、表示したいフィルターオプションのみを表示するためのカスタムロジックが必要になることを意味します。=可視性へのバインド

2)フィルターオプションの異なる表現ごとに個別のビューも可能ですが、さらに各個別のビューにいくつかの追加のコントロールまたはロジックが含まれている場合にのみこれを行います。

于 2013-03-23T18:07:43.330 に答える
0

私にとって、この種のロジック(特定のfilterOptionをビューに含めるかどうか)は、実際にはビューモデルに属し、ビューには属しません。1つのビューを実装し、A、B、Cごとにビューモデルインスタンスを個別に実装することを検討します。ビューモデルは1つのクラスにすることができ、表示されるfilterOptionsによってパラメーター化されます。

于 2013-03-24T01:34:04.180 に答える