5

私はMVVMパターンをいじくり回してきましたが、今はそれに基づいて小さなアプリケーションを実装しようとしています。

このアプリケーションには、驚くべきことに、いくつかのデータが表示されるデータグリッドがあります。今、私はそれにいくつかのグループ化機能を追加しようとしています。これをコード(C#およびXAML)で記述する方法は知っていますが、責任のあるコードをどのレイヤーに配置する必要があるのか​​疑問に思っています。

私の一部は、それがビューにあるべきだと言っています。なぜなら、それは特にその特定のビューのためのコードだからです。これは一般的ではなく、データをグループ化するという1つの目的を果たします。

一方、コマンドを使用してViewModelで処理する必要があると思います。ただし、ViewModelをView固有のロジックで汚染しているように感じます。

これに当てることができるリグはありますか?

4

3 に答える 3

7

ほとんどの MVVM アプリでは、次のように責任を分割しようとしています。

  • ビューは、viewmodel データをピクセルに単純に変換するだけです。通常、これはほとんどが XAML であり、コード ビハインドはほとんどありません。
  • ビューモデルは、グループ化などのビュー固有のロジックを実行する必要があります。ビューごとに複数のビューモデルを使用することもよくあります。たとえば、グループ化を実装するために、グループごとのサブビューモデルのリストをビューに公開するメインビューモデルを持つことができます。
  • 複数のビューモデルに適用されるロジックがある場合、それはおそらくドメイン ロジックであり、ドメイン モデルに入る必要があります。

したがって、グループ化はビューモデルに入れる必要があると思います。

于 2010-06-11T08:25:08.767 に答える
0

ユーザーがグループ化に何らかの影響を与える場合は、ViewModelによって公開されるICollectionViewにバインドします。ビューはグループ化、フィルタリング、並べ替え、通貨をサポートし、ICollectionViewインターフェイスはSystem.ComponentModelからのものであるため、ViewModelプロジェクトに「GUI」参照を追加する必要はありません。また、WPFDataGridはICollectionViewインターフェイスをサポートしています。

ユーザーがグループ化に影響を与えない場合(グループは固定されています)、モデル内のデータを「事前に」グループ化します。HTH。

于 2010-07-09T20:48:19.140 に答える
0

これに対する答えはありません。それは本当にあなたのシナリオに依存します:

1) ユーザーは問題に何らかの影響を与えていますか? そうではなく、それが固定グループ化されている場合は、IGrouping を使用してプロパティを公開し、ビューに入る前にデータサービスまたは LINQ を使用してそれを実行します。

ビューでグループ化を行うと、通常はパフォーマンスが低下しますが、明確な選択ではありません。ユーザーが多くの異なるグループ化を選択できる場合、追加された使いやすさに対して支払う価値のあるペナルティになる可能性があります。

于 2010-06-11T08:25:20.723 に答える