ViewModel にはビューまたは ViewModel の ObservableCollection が必要ですか?
-
12-09-2019 - |
質問
を使用する際の基本的な MVVM 設計アプローチを理解しようとしています。 アイテムコントロール 経由でバインドすることで データテンプレート に 観察可能なコレクション ViewModel 上で。
ObservableCollections にバインドする例を見てきました。 文字列, ビュー, 、 そして モデルの表示.
文字列へのバインドは次の場合のみのようです デモ, 」へのバインディングです。View のコレクションを含む ViewModel ViewModel のコレクションを含む ViewModel「WPFの威力が如実に出ているようです。
MVVM パターンの使用に習熟している人にとって、ItemsControl、ListView、ListBox を ViewModel 内のコレクションにバインドするための標準的なアプローチは何ですか? 次のような経験からのアドバイスを求めています。
- 常に ObservableCollection<...> を使用し、List<...> を使用しないでください。
- コレクションを表示するには、ItemsControl よりも優れたものがあります...
- コードビハインドではなく ViewModel でフィルタリングを機能させるには、次を使用します。
- ... の場合にビューのコレクションを使用します。および ViewModel のコレクションの場合...
- 90% の場合、ItemsControl を作成し、それを独自の ViewModel を持つ View の ObservableCollection にバインドします。
解決
次の理由から、ViewModel の ObservableCollection を使用します。
- ObservableCollection には、変更されたときに通知できるイベントがすでにあります (例:アイテムがコレクションに追加またはコレクションから削除されたとき)。
- ここでは ViewModel の「レイヤー」にいるため、ViewModel にビューではなく ViewModel のコレクションを含めることがより明確に分離されます。
- コレクション内の項目からデータを変更または取得する必要がある場合、項目が ViewModel であれば、より簡単にデータを変更したりアクセスしたりできます (ビューの場合は、頻繁に View の DataContext をキャストしたり、その UI 要素にアクセスしたりすることになります)。
他のヒント
私はのviewmodelsののObservableCollectionを使用して好きです。コレクションにバインドビューはViewModelににその外観を与えるのDataTemplateを定義することができます。これは、コンポーネント間の少ないカップリングにつながります。
私は、同じ質問を持っていますが、「モデル」と「ビュー」を交換してください。 :)
私は他のモデルのコレクションでモデルを持っています。 私は私のviewmodelが他のviewmodelsの監視可能なコレクションを持っていると思いますが、私はそのようにそれをインスタンス化したら - モデルコレクションコンテンツ間の接続が失われます。 私は今、モデルコレクションに戻ってのviewmodels観測可能なコレクションからすべてのイベントを配線開始する必要がありますか?