いくつかの項目 (エントリ) の概要を示す小さなアプリがあります。概要のリストにあるエントリのタイトルは、エントリのプロパティです。エントリをクリックすると、エントリを編集できるタブのようなものが開きます。エントリを編集して保存すると、次回は概要タブが更新されます。
ここでは、理解を深めるためのモックアップを示します。
アプリは MVVM パターンに基づいています。各ビューには、DataContext として ViewModel があります。各 ViewModel は Modelを使用し、各 Model にはDatabaseがあります。
概要タブには、独自の View、ViewModel、および Model (ペア) があります。タブも。エントリの各タブは、同じペア (シングルトン インスタンス) を使用します。他のタブが選択されている場合、少数のバインディングのみが更新されます。
私の質問は、タブ間で通信する方法です。
私には2つのアプローチがあります
- Mediator パターン (Bootstrapper は 2 つの ViewModel をmediatorと結合します)
- 各モデルは同じデータベースを使用します (モデルはデータベースをリッスンし、ビューモデルはモデルをリッスンします)
しかし、私はこれらのアプローチに満足していません。
モデル間またはビューモデル間で通信する必要がありますか? それとも、これは間違った方法ですか?
アップデート
皆さんの回答に本当に感謝しています。私の意見では、それらのどれも間違っていたり正しいものではありません。どちらのソリューションが自分に合っているかは好みの問題だと思います。EventAggregator パターンがとても気に入っています。これは、PRISMでの EventAggregatorパターンの実装に関するKarl Shifflettによる素晴らしいビデオです 。しかし、それはパターン自体も説明しています。
@Thomas私の意見では、これを1つのViewModelで行うのは悪い解決策です。ViewModel を分離する必要があります。関心の分離に基づく MVVM 。