Подход Дэна во многом идентичен тому, что я собирался предложить.Чтобы ответить на конкретные вопросы:
1) Я бы сделал их UserControls, если есть какая-либо сложность их макета вообще.С одной стороны, проще делать все последовательно;с другой стороны, это облегчает работу с макетом этого элемента управления в Expression Blend без необходимости создания экземпляра всего окна.
2) Существует модель представления приложения для всего окна.Он содержит свойства для представлений, которым они нужны:
ObservableCollection<ClassCodeViewModel> ClassCodes
ClassCodeViewModel NewClassCode
ClassCodeViewModel SelectedClassCode
PupilViewModel NewPupil
PupilViewModel SelectedPupil
2A) ClassCodeViewModel
предоставляет CreateCommand
, который вызывает событие при его выполнении.Модель представления окна обрабатывает это событие и выполняет соответствующее обновление до ClassCodes
, когда оно поднято.
2B) Модель представления кода класса содержит наблюдаемую коллекцию моделей представления ученика.Свойство SelectedItem
в свойстве SelectedClassCode
в модели представления окна, с которым связан SelectedItem
в модели представления кода класса.Синий вид привязан к SelectedClassCode.Pupils
.
2C) Аналогично, модель представления окна содержит свойство SelectedPupil
, с которым связано свойство SelectedItem
синего представления.Красный вид привязан к SelectedPupil
.
2D) Это обрабатывается так же, как в 2A: модель вида зрачка вызывает событие, а модель вида окна обрабатывает его.
3) Модель представления зрачка содержит логическое свойство CanCreate
.Это не используется в красном представлении.Модель представления окна устанавливает NewPupil.CanCreate
в установщике SelectedClassCode
.
Вы не спрашивали, но оранжевый вид привязан к свойству Documents
SelectedPupil
, что, вероятно, (зависит ото том, какие документы на самом деле являются) наблюдаемой коллекцией DocumentViewModel
объектов.
Возможно, я слишком долго трудился в полях MVVM, но мне это кажется очень простым.