MVVM データグリッドのグループ化を担当するパターンの部分
-
26-09-2019 - |
質問
私は MVVM パターンをいじくり回して、現在、それに基づいた小さなアプリケーションを実装しようとしています。
このアプリケーションには、驚くべきことに、データが表示されるデータグリッドがあります。今、それにグループ化機能を追加しようとしています。これをコード (C# および XAML) で記述する方法は知っていますが、責任のあるコードをどの層に配置すればよいのか疑問に思っています。
私の心のどこかで、それは特定のビュー専用のコードなので、ビュー内にあるべきだと思っています。これは汎用的なものではなく、次の 1 つの目的を果たします。データをグループ化します。
一方、コマンドを使用してViewModelで処理する必要があると思います。ただし、ViewModel を View 固有のロジックで汚染しているように感じます。
これについて何か明かすことはできますか?
解決
私の MVVM アプリのほとんどでは、次のように責任を分担するようにしています。
- ビューは、ViewModelデータの単純な翻訳をピクセルに実行するだけです。通常、これにより、ほとんどが XAML になり、コードビハインドはほとんどなくなります。
- ViewModelは、グループ化などのビュー固有のロジックを実行する必要があります。ビューごとに複数のビューモデルを使用することもよくあります。たとえば、グループ化を実装するために、グループごとのサブビューモデルのリストをビューに公開するメイン ビューモデルを作成できます。
- 複数のViewModelに適用されるロジックがある場合は、おそらくドメインロジックであり、ドメインモデルに移動する必要があります。
したがって、グループ化はビューモデルに含めるべきだと思います。
他のヒント
これに誰も答えはありません。それは本当にあなたのシナリオに依存します:
1)ユーザーが問題に影響を持っていますか?そうではない、それが固定された集団だ場合、私はIGroupingとプロパティを公開したいし、それがビューに入る前に、それを行うにはDataServiceのか、LINQを使用します。
ビューでグループ化するかどうかは、一般的にパフォーマンスが低いが、それは明確な選択肢ではありません。ユーザーが別のグループの多くを選択することができた場合は、これを追加し、使い勝手を支払うペナルティ価値があるかもしれません..
ユーザーが、私はにバインドしたいグループ化に何らかの影響を与えている場合は、<のhref =「http://msdn.microsoft.com/en-us/library/system.componentmodel.icollectionview.aspx」のrel =」 nofollowをnoreferrerは "> ICollectionViewにはViewModelにによって公開さし。ビューのサポートは、グループ化フィルタリング、ソートや通貨とICollectionViewインターフェイスあなたのViewModelプロジェクトに「GUI」の参照を追加する必要がないように、System.ComponentModelからです。また、WPFのDataGridには、ICollectionViewインターフェイスをサポートしています。
ユーザーがグループ化(グループが固定されている)には影響を及ぼさない場合は、私は、モデル内のデータを-group「事前」と思います。 HTHます。