我们正在使用MVP,但问题本身并不一定是MVP特定的。基本上,演示者需要知道模型是否发生变化,以便他们可以处理并反映他们视图的变化。
使用模型中的事件很容易,但模型也包含其他模型 - 它们可以通过不知道根模型或任何演示者的演示者+视图进行修改。 p>
以下是此类模型的简化示例:
class Document
{
Header header;
List<Paragraph> paragraphs;
Footer footer;
}
假设有两个演示者和视图可以创建文档的表示形式; DocumentEditPresenter / -View和DocumentPreviewPresenter / -View。
然后会有文件所包含的模型; HeaderPresenter / -View,ParagraphPresenter / -View和FooterPresenter / -View。
DocumentEditPresenter会在从视图中获取事件后为段落创建ParagraphPresenter / -View。 然后,ParagraphPresenter会修改段落 - DocumentEditPresenter和DocumentPreviewPresenter都应该获得某种信号来刷新。
我知道一个解决方案是所有模型都包含对其父项的引用和/或关于每个可能的修改的事件,但它看起来过于复杂并且会使编辑模型容易出错。该模型也应该是可序列化的。
类似于WPF的路由事件将是完美的。
答案 0 :(得分:0)
如果你的模特很深,那么听“来自深层次”的活动会很痛苦。
我会将管理员的代码组织起来,就像外观一样,这样模型中的任何修改,甚至深度,都应该通过其中一个管理器。 然后,我会向经理提出一个事件,主持人会听取它。
您的活动可能只是“ModelChanged”触发刷新。