В идеале вы бы хотели, чтобы ViewModel ничего не знала о представлении, и наоборот, поэтому с этой точки зрения это не то, что вы хотели бы.
Чтобы преодолеть это, вам нужна навигация ViewModel-ViewModel. Таким образом, вы просто указываете, к какой ViewModel вы хотите перейти, и соответствующий View будет загружен. Вы можете реализовать это вручную, и в зависимости от выбранной вами реализации у вас будет какой-то способ разрешения представления, связанного с этой моделью представления.
Один из способов сделать это - назвать соглашения и рефлексию. Это означает, что вы называете все свои страницы как:
И все ViewModels, такие как:
- MyPageModel
- YourPageModel
- OurPageModel
Тогда с помощью отражения вы можете просто удалить суффикс "Model" и разрешить страницу оттуда. Обратите внимание, что я использую именование Page и PageModel, но, конечно, это работает и для View и ViewModel. После этого вам все равно придется учитывать навигацию к этим представлениям и обратно, модальные они или нет и т. Д.
Хотя вы можете реализовать все это вручную, вероятно, стоило бы взглянуть на инфраструктуру MVVM. Метод, который я только что описал, заключается в том, как FreshMvvm делает это, например. Но есть и другие хорошие фреймворки, такие как Prism, Exrin, MvvmCross и т. Д.