Один из основных владельцев шаблона MVVM заключается в том, что вы должны иметь возможность выполнять свой код ViewModel без View, чтобы выполнить модульное тестирование вашей логики View.Другими словами, в идеале вы должны иметь возможность выполнять ваше приложение в режиме «без головы».
В вашем примере вы утверждаете, что ParentView создает ChildView, который, в свою очередь, создает ChildViewModel (к которому вы пытаетесь подключиться.вверх).Может ли это работать в режиме без головы?Мне кажется, что вы полагаетесь на свой View для выполнения этой навигации Parent-Child.
Если вы перевернете его другим способом, у ParentViewModel создайте ChildViewModel, у вас больше не будет проблем со связью между ViewModels.ParentView необходимо «наблюдать» (т. Е. Изменять свойства) для нового создаваемого ChildViewModel и соответствующим образом создавать ChildView.
Более подробно:
- ParentView создает экземпляр ParentVM
- Пользователь взаимодействует таким образом, что требуется дочерний элемент
- ParentVM создает ChildVM, экспонируя его через свойство ChildVM
- ParentView обрабатывает результирующее событие PropertyChanged, создавая ChildView, устанавливая егоDataContext to ChildVM.