私たちは MVP を使用していますが、問題自体は必ずしも MVP 固有のものではありません。基本的に、プレゼンターはモデルが変更されたかどうかを認識して、変更を処理してビューに反映できるようにする必要があります。
これはモデルでイベントを使用して簡単に実行できますが、モデルはモデルである他のオブジェクトでも構成されています。これらは、ルート モデルまたはそのプレゼンターを知らないプレゼンター + ビューによって変更できます。
このようなモデルの簡単な例を次に示します。
class Document
{
Header header;
List<Paragraph> paragraphs;
Footer footer;
}
Document の表現を作成する 2 つのプレゼンターとビューがあるとします。DocumentEditPresenter/-View および DocumentPreviewPresenter/-View。
次に、ドキュメントを構成するモデル用のものがあります。HeaderPresenter/-View、ParagraphPresenter/-View および FooterPresenter/-View。
DocumentEditPresenter は、ビューからイベントを取得した後、Paragraph の ParagraphPresenter/-View の作成を開始します。次に、この ParagraphPresenter が Paragraph を変更します。DocumentEditPresenter と DocumentPreviewPresenter の両方が、更新するための何らかのシグナルを取得する必要があります。
解決策の 1 つは、すべてのモデルに、可能なすべての変更に関する親および/またはイベントへの参照が含まれていることですが、それは非常に複雑に見え、モデルの編集でエラーが発生しやすくなります。また、モデルはシリアライズ可能である必要があります。
WPF のルーティング イベントに似たものがあれば完璧です。