11

ViewModel のObservableCollectionsにDataTemplatesを介してバインドすることにより、ItemsControlを使用するときの基本的な MVVM 設計アプローチを理解しようとしています。

stringViews、およびViewModelsのObservableCollections にバインドする例を見てきました。

文字列へのバインドはデモ専用のようですが、WPFの威力が本当に出そうなのは「ViewModelのコレクションを含むViewのコレクションを含むViewModel」へのバインドです。

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

  • 常に ObservableCollection<...> を使用し、決して List<...> を使用しない...
  • コレクションを表示するための ItemsControl よりも優れたものは...
  • コード ビハインドの代わりに ViewModel でフィルタリングを機能させるには、...
  • ... の場合に View のコレクションを使用し、... の場合に ViewModel のコレクションを使用する
  • 90% の時間、ItemsControl を作成し、それを独自の ViewModel を持つ View の ObservableCollection にバインドします...
4

3 に答える 3

10

次の理由で、ViewModelsのObservableCollectionを使用します。

  • ObservableCollectionには、変更されたとき(たとえば、アイテムがコレクションに追加/削除されたとき)にシグナリングに使用できるイベントがすでにあります。
  • 私たちはViewModelの「レイヤー」にいるので、ViewModelにViewsではなくViewModelsのコレクションを含めるためのより明確な分離を提供します
  • コレクション内のアイテムを変更または取得する必要がある場合、アイテムがViewModelsであれば、そのデータをより簡単に変更/アクセスできます(ビューの場合は、ビューのDataContextをキャストしたり、UI要素にアクセスしたりすることがよくあります)。
于 2009-06-10T19:12:31.790 に答える
1

同じ質問がありますが、「ビュー」を「モデル」に置き換えてください。:)

他のモデルのコレクションを持つ MODEL があります。ビューモデルに他のビューモデルの監視可能なコレクションを持たせたいのですが、そのようにインスタンス化すると、モデル コレクションのコンテンツ間の接続が失われます。ビューモデルの観察可能なコレクションからモデル コレクションへのすべてのイベントの配線を開始する必要がありますか?

于 2009-06-30T09:53:22.937 に答える
1

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

于 2009-06-08T14:53:11.800 に答える