2009-06-08 17 views
11

私はViewModelに上にObservableCollectionsDataTemplatesを経由して、それを結合することによってのItemsControlを使用した場合、基本的なMVVM設計アプローチを理解しようとしています。私のViewModelにObservableCollectionがViewまたはViewModelを持つべきですか?

私は文字列ビュー、およびのviewmodelsのObservableCollectionsに特異的に結合する例を見てきました。文字列にバインド

デモのために、WPFの力が本当に出てくるように見えること「のviewmodelsのコレクションが含まれているビューのコレクションが含まれているのviewmodels」に結合されているように見えます。

MVVMパターンに習熟している人にとって、ItemsControl、ListView、ListBoxをViewModelのコレクションにバインドする標準的なアプローチは何ですか?私はこのような経験からアドバイスを探しています:

  • はいつものObservableCollection < ...>を使用して<の一覧を表示したことがない...>は、コレクションを表示するには、ItemsControlのより良い何か
  • ...理由...
  • 代わりときビューのコードビハインド、使用...
  • 使用コレクション...とのviewmodelsのコレクション...
  • 90%のあなたのViewModelで動作するようにフィルタリングを得るために私はItemsControlを作成し、それをOにバインドする私自身のViewModelsを持つビューのbservableCollection ...

答えて

10

Iは、次の理由のviewmodelsののObservableCollectionを使用する:

  • のObservableCollectionは既に(項目がコレクションから削除/追加されるなどの場合)変更されたときに、シグナリングのために利用可能なイベントを有します。
  • 私たちはViewModelの 'レイヤー'にありますので、ViewModelにビューではなくViewModelのコレクションが含まれるように、よりクリーンな分離を提供します
  • コレクション内のアイテムからデータを変更したり取得したりする必要がある場合、項目がViewModelsの場合(ビューのDataContextを頻繁にキャストするか、UI要素にアクセスするビューの場合)、そのデータを変更またはアクセスします。
+0

お役に立ちました、 –

+0

+1、これは間違いなく道のりです。ビューモデルにはビューモデルのコレクションがあり、ビューのリソースコレクションにはそれぞれのビューモデルのデータ型があります。 –

1

私はViewModelsのObservableCollectionを使います。コレクションにバインドするビューは、ViewModelにその外観を与えるDataTemplateを定義できます。これにより、コンポーネント間の結合が少なくなります。

+0

ViewModelsのObservableCollection(Viewsではなく)がある場合、そのDataTemplateにそのXAMLがあり、そのXAMLにViewの.xamlファイルがあるという違いは何ですか? –

1

私は同じ質問がありますが、「ビュー」を「モデル」に置き換えます。 :)

私は他のモデルのコレクションとモデルを持っています。 私はビューモデルに他のビューモデルの観測可能なコレクションを持たせたいが、そのようにインスタンス化すると、モデルコレクションのコンテンツ間の接続が失われる。 viewmodels observableコレクションからすべてのイベントをモデルコレクションに配線する必要がありますか?

+1

はい、イベントはそれを行うための最善の方法です。安全のために弱いイベントパターンの使用を検討してください。 – Gusdor

関連する問題