Как я справляюсь с подобной ситуацией, родительский презентатор должен знать о дочерних презентаторах (как о зависимостях конструктора).
У каждого дочернего докладчика есть свое представление, поэтому в родительском докладчике моя логика выглядит примерно так:
Initialize ()
- инициализировать родительский
- вызовите инициализацию для каждого дочернего презентатора (это для извлечения всех необходимых данных, КРОМЕ данных, которые в первую очередь показаны. Например, если у вас есть презентатор счетов, вам нужно откуда-то получить коллекцию клиентов, если у вас будет поле со списком клиентов, чтобы вы могли могу поменять это на счет)
- встроить дочерние представления в родительское представление (родительский элемент обычно представляет собой форму, где дочерние элементы являются пользовательскими элементами управления)
затем после этого, обычно при загрузке родителя, с помощью некоторого метода LoadXXX, я также загружаю потомков. В вашем примере это будет что-то вроде
schoolPresenter.LoadSchool (школа)
, который, в свою очередь, загружал бы данные по всем докладчикам, например, загружал родительские элементы управления сведениями о школе, передавал коллекцию курсов докладчику курсов и т. Д. *
Одна мысль, которую я заметил, что это хорошо сделать, - это иметь метод Refresh () для каждого из этих докладчиков, который в основном знает, как загрузить себя в зависимости от текущего состояния. Может быть, у вас не может быть метода, подобного этому, для родительского докладчика, но простые докладчики работают нормально, как это, поэтому это означает, что в методе LoadSchool вы можете иметь что-то вроде
coursesPresenter.Courses = school.Courses;
coursesPresenter.Refresh ();