2

MVVMパターンの1つのことを理解するのを手伝ってください:

たとえば、都市を地図上に表示する必要があります。ViewModelには、ViewItemsSourceにバインドされたObservableCollectionがあります。ObservableCollectionには、「City」タイプのオブジェクトが含まれています。「City」クラスはObservableObjectから継承する必要がありますか(MVVM Toolkitを使用しています)?または、ラッパークラスを作成し、それをObservableObjectから継承し、ViewModelで「City」オブジェクトからのデータを使用して新しいラップオブジェクトを作成し、それらをコレクションに追加する必要がありますか?

ありがとうございました!

4

2 に答える 2

1

City クラスがモデル内にあり、city オブジェクトのプロパティの変更について実際に知る必要があると仮定すると、そのラッパー (CityViewModel) を作成する必要があります。ラッパーは、City クラスへの変更を通知するイベントをリッスンし、関連するプロパティ変更通知を開始する必要があります。

モデル クラスはモデルに適合するように設計する必要があり、ビューに合わせて変更しないでください。最初に ViewModel を使用するポイントは、ビューからモデルを抽象化することです。モデルはビューについて何も知らないはずです。

City クラスのプロパティが変更されない場合、または変更されても気にしない場合 (そしてあなたが純粋主義者でない場合) は、ObservableObject を継承せずに直接公開することができます。(私はMVVMツールキットを使用していませんが、CityオブジェクトをObservableCollectionに保存しているという理由だけで、一般的にObservableObjectを継承する必要がある理由がわかりません)。

ただし、純粋主義者の見解は、バインドするすべてのものをラップし、モデルから直接ビューに何も公開しないことです。

于 2012-11-22T06:40:46.653 に答える
1

ObservableCollection または ObservableObject は MVVM モデルとは関係ありません。ObservableCollection と ObservableObject なしで MVVM ベースのアプリケーションを作成できます (ObservableObject は、クラスのプロパティの値を変更する必要がある場合に使用されますが、アプリケーションが読み取り専用の場合は必要ありません)。

MVVM - M-Model (ビジネス層)、V-View (GUI)、ViewModel- (GUI のコンテキスト)。

XAML がバインディングで機能する場合。何かが変更されたことを GUI に通知するには、通知メカニズムが必要です。コレクションが変更された場合は、コレクションに項目を追加または削除したことを意味し、ObservableCollection を使用している場合は不要な通知を発生させる必要があります。同様に、クラス City にプロパティ Population があり、変更時に GUI に通知する必要がある場合は、ObservableObject を作成する必要があります。

それが役に立てば幸い..

于 2012-11-22T08:29:05.707 に答える