As I deal with a similar situation, the parent leader should know about the presenters of the child (as constructor dependencies).
Each child presenter has its own view, so in the parent presenter, my logic looks something like this:
Initialize () - initialize the parent - call initialization on each child presenter (this is to get all the necessary data. EXCLUDE the data that is mainly displayed. For example, if you have a leading invoice, you need to get a collection from the client, if you have there will be a client combo box so that you can change this for the invoice) - insert child views into the parent view (the parent element is usually a form where the children are user controls).
then after that, usually when loading a parent, using some LoadXXX method, I also load the children. In your example, it will be something like
schoolPresenter.LoadSchool (school)
which, in turn, downloads data to all speakers, for example, loads parent controls with information about the school, passes a collection of courses to the cursor, etc ...
You might think that I noticed that itβs good to do this, have a Refresh () method for each of these speakers, which basically knows how to load itself based on the current state. Perhaps you may not have such a method on the parent presenter, but simple presenters work just fine, so this means that in the LoadSchool method you can have something like
coursesPresenter.Courses = school.Courses; coursesPresenter.Refresh ();