0

最初の MVVM WPF プロジェクトなので、おそらくよくある質問をしているのですが、答えの検索魔法が見つかりません。

いくつかのビューがあり、そのうちの 1 つで特定のコマンドが呼び出されたときに、他のいくつかのビューを無効にする必要があります。有効にする必要があるかどうかを示すブール値フラグをデータ モデルに配置すると、他のビューは ViewModel バインディングを通じてその変更を確認できます。しかし、モデルは「INotifyPropertyChanged」ではないため、データ モデルでそのフラグを変更しても何も更新されません。では、これを実現するには何が必要でしょうか?

4

3 に答える 3

2

MVVM でビューモデルを分離する方法は、イベント アグリゲーターを使用することです。コマンドを実行すると、イベントが発生します。このイベントに関心のある他のビューモデルにはサブスクリプションが設定されており、イベントが発生したときに通知を受け取ります。

非常に優れたイベント アグリゲーターの実装は、「イベント アグリゲーターの実装サンプル / ベスト プラクティス」という名前の質問への回答に記載されています

于 2013-05-30T12:37:24.343 に答える
1

コメントは、可能な解決策の 1 つを既に示唆しています。それINotifyPropertyChangedは、モデルに実装することです。

ただし、モデルをよりシンプルに保ち、アーキテクチャ レイヤーの結合を少なくする別のソリューションがあります。VM が相互に依存し、モデルを単純なデータ バケットとして扱う場合、モデルに依存するのではなく、独自の INPC 実装を介して通知を受けることができます。つまり、VM A がモデル X がいつ変更されたかを知る必要がある場合、モデル X に直接依存するのではなく、VM B (モデル X をラップする) との関係を確立することができます。

于 2013-05-30T12:06:20.127 に答える
0

これはまさにあなたの View-Model の目的です! モデルに INPC を実装することは何も悪いことではありませんが、それを期待したり、信頼したりすべきではありません。View-Model は、UI に依存しないモデルとユーザー インターフェイスの間の架け橋です。

問題に対処する一般的な方法は、INPC を実装するモデル クラスをラップする View-Model クラスを作成することです。ビューモデルに直接バインドして、INPC を介して値の変更を UI に反映できるようにします。

于 2013-05-30T13:47:00.023 に答える