質問

私は 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ます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top