Насколько я понимаю, операции с представлением, т. Е. Пользовательским интерфейсом, должны выполняться исключительно представлением. При работе с MVVM пользовательский интерфейс не должен напрямую контролироваться ViewModel или BusinessLogic (поскольку они не должны ничего знать о конкретной реализации View), а должен работать с сообщениями.
Это означает, что если мы хотим открыть окно редактора из ViewModel, мы отправляем сообщение из ViewModel о том, что мы хотим его открыть, и получаем его в представлении и открываем там окно. То же самое верно для навигации по разным страницам, где вы получите сообщение на главной странице (или любую другую страницу, на которой хранятся страницы, по которым вы хотите перемещаться) и обрабатываете все, что там есть.
Альтернативой этому было бы использование DialogService или чего-то подобного, который обрабатывает открытие окон в центральном месте. Однако, поскольку NavigationService является свойством класса Page, нам необходимо обработать сообщение на странице.
Пример кода с использованием MVVM Light Toolkit : (не тестировался, частично взят из примера RiaXBoxGames Шона Вильдермута ):
ViewModel (например, поместить это в команду для кнопки):
Messenger.Default.Send<bool>(true, "GoToNextPage");
Просмотр (например, поместить это в конструктор):
Messenger.Default.Register<bool>(this, "GoToNextPage", ignore =>
{
// your code to go to next page
});