私のビューの1つにドロップダウンメニューが含まれています。選択が行われるとき、そのビューモデルとプログラム内の他のすべてのビューモデルは、ビューを更新できるように変更を認識している必要があります。現在、各ビューモデルには選択範囲の独自のコピーが含まれており、変更された場合はすべて手動で更新する必要があります(それぞれにパブリックRefresh(int newVal)があります)。これを行うためのより良い方法はありますか?
3 に答える
考えられるアプローチは、イベント アグリゲーターを使用することです。アグリゲーターは、パブリッシャーとレシーバーの間でメッセージをディスパッチするために使用されます。
メッセージを送信する必要があるオブジェクトはメッセージ タイプを に登録し、受信EventAggregator
する必要があるオブジェクトはにも登録します。EventAggregator
これを実装するには多くの方法があります。任意の MVVM フレームワークを使用することをお勧めします。ほとんどの一般的なフレームワークは、実績のあるこれの実装を提供します。
例としては、Caliburn Microがあります。CM フレームワークは、EventAgregator
このためのクラスを既に提供しています。
この例については、Caliburn.Micro の EventAggregator を使用したメッセージングの概要を参照してください。
イベント アグリゲーターを使用して、すべてのビュー モデルで処理できるイベントを発行することができます (おそらく何らかの基本クラスで?)。
(集約された) イベントを使用します。
ビューが読み込まれたときにイベントをサブスクライブし、ビューがアンロードされたときにサブスクライブを解除し、読み込まれたときにビュー モデル内の変数を必ず初期化してください。次に、選択が変更されたときにイベントを公開します (新しいデータをパラメーターとして渡します)。