MVVMでは、ユーザーコントロールはビューであるため、DataTemplateはビューと見なされますか?

StackOverflow https://stackoverflow.com/questions/1016828

質問

MVVMでは、すべてのビューにViewModelがあります。ビューがデータを取得するViewModelをアタッチできるウィンドウ、ページ、またはユーザーコントロールであると理解しているビュー。

ただし、 DataTemplate はViewModelのデータをレンダリングすることもできます。

したがって、DataTemplateは別の「表示」と理解していますが、相違点があるようです。 Windows、Pages、およびUserControlsは独自の.dllを定義できます。1つのタイプはテンプレートをアタッチすることでDataContectにバインドされ、Windows、Pages、UserControlsは ServiceLocator / Container など。

UIでViewModelのデータをレンダリングする場合、DataTemplatesはWindows / Pages / UserControlsとどのように異なりますか?また、他の種類の「ビュー」もありますか?これらの4つ以外?

役に立ちましたか?

解決

私が使用する方法であるDataTemplateは、実際にはViewをViewModelにリンクする方法です。通常、MVVMのDataTemplatesは次のようになります。

<DataTemplate DataType="{x:Type vm:FooViewModel}">
    <v:FooView />
</DataTemplate>

他のヒント

MVVMに移行するこの時点で私にとって最も意味があるのは、次のとおりです。

UserControls:ユーザーのプロセス全体を実行するためのビューとコントロールをグループ化します。作成したスライドアウトドロワーのユーザーコントロールを使用して、ユーザーがパーツのさまざまな分類をめくることができるようにします(各メインパーツカテゴリは、独自の選択プロセス/ウィザードでユーザーをルーティングします)。チャートコントロールもご覧ください。

ビュー:基本的に、再利用できるように最小レベルで目的のデータを取り込む関連データとコントロールをグループ化するグリッド。

DataTemplates:&quot; items&quot;に関する事実のグループ化リストボックスやGridViewのように。これは、リスト内の情報を取得しようとしているオブジェクトをどのようなテキストが表しているのかと考えています。そのため、コントロールテンプレートはデータテンプレートブロックをラップして、データテンプレートでラップされたアイテムのコレクションの表示動作を制御します。

それは私がそれを理解する方法ですが、境界は非常に曖昧です。アンドリュー・トロエルソンによるApressの本 Pro Expression Blend 4 が好きです。しかし、彼は実際にデータ量の多い例を提供していません。

DataTemplateを使用してビューをビューモデルにバインドすることはお勧めしません。 ビューがフォーカスを取得するたびにビューが更新されるため、現在このアプローチを使用するとパフォーマンスの問題が発生しています。 こちらこちら

残念ながら、私はまだより良いオプションを見つけていません。

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