1

私はMVVMとWPF自体が初めてです。WPF でプロトタイピングを行う必要があり、概念的な質問に達しました。

データを送信するサーバーがあるとします。現在表示しているかどうかに関係なく、キャッシュに保存する必要がありますが、これは「実際のデータ」であり、いつか UI に配置する必要があります (ユーザーが特定の画面を開いたとき)。これがビューモデルです。

私の質問は非常に明白です-UIを何らかのサービスに保存されている実際のデータにバインドする必要がありますか、それともそのデータの周りにビューモデルラッパーを実行してバインドする必要がありますか? 最初のケースでは、ディスパッチャーを使用しない限り、「呼び出し元のスレッドはこのオブジェクトにアクセスできません」という例外を受け取りますが、モデルでディスパッチャーを呼び出すと正しく見えません

後者の場合、次のことが必要になります。

  1. 「実際のモデル」からラッパーにデータの 90% をコピーします。
  2. 基になる「実際のデータ」の変更を手動で監視して、INotifyPropertyChanged を実装する場合に備えてビューモデルを更新します。

正しい方法は何ですか?

4

2 に答える 2

1

私は、「サービス層」 (WCF またはその他の通信メカニズムを介してサーバーと実際にやり取りするクライアント側のコード) と呼んでいるものにデータ キャッシュを配置することを好みます。

データキャッシュは実際にはいくつかList<T>あり、実際には必要ないため、そこで変更通知をリッスンしません。

代わりに、これらの「クライアント側サービス」を ViewModel から使用し、アイテムを取得List<T>して ViewModel 内のObservableCollection<T>. このようにして、View から ViewModel への双方向バインディングを行うことができ、ビューが「サービス レイヤー」に格納されている「下位レベル」のデータ キャッシュと対話する必要はありません。

ViewModel 操作を実行するときに Dispatcher を使用する必要はありません。したがって、データを取得するために必要なマルチスレッドを実行できるため、これはよりスケーラブルなアプローチです。

于 2012-11-10T20:09:54.670 に答える