С учетом приложения UWP Prism 7 с тремя представлениями и соответствующими моделями представления:
containerRegistry.RegisterForNavigation<BlankPage1, BlankPage1ViewModel>();
containerRegistry.RegisterForNavigation<BlankPage2, BlankPage2ViewModel>();
containerRegistry.RegisterForNavigation<BlankPage3, BlankPage3ViewModel>();
Если мы перейдем от BlankPage1 к BlankPage2, передав параметр (из команды в ViewModel1):
public virtual DelegateCommand GoToPage2Command => new DelegateCommand(GoToPage2);
public virtual async void GoToPage2() {
await NavigationService.NavigateAsync("BlankPage2", null, ("param", 5678));
}
При OnNavigatedToAsync
переопределении BlankPage2ViewModel
параметр правильно передается.
Теперь, если мы перейдем от BlankPage2ViewModel
к BlankPage3ViewModel
, с помощью команды и передадим другой параметр
public virtual DelegateCommand GoToPage3Command => new DelegateCommand(GoToPage3);
public virtual async void GoToPage3() {
await NavigationService.NavigateAsync("BlankPage3", null, ("param", 1234));
}
Опять же, это работает, и значение параметра 1234
передается в BlankPage3ViewModel
.
Теперь, однако, если мы вернемся к BlankPage2ViewModel
:
await NavigationService.GoBackAsync();
Параметры не передаются обратно в OnNavigatedToAsync
переопределение BlankPage2ViewModel
. Конечно, мы ожидаем увидеть значение параметра 5678
?
ПРИМЕЧАНИЕ : мы также устанавливаем NavigationCacheMode
в Required
внутри каждого вида.
Ответ на вопрос , заданный на форумах MSDN относительно аналогичной проблемы:
Если вы используете Frame.Navigate для перехода на ту же страницу, ваш PageA не будет повторно реализован, но будет вызываться метод OnNavigatedTo с новыми параметрами.
Таким образом, вы можете изменить информацию, отображаемую на странице (даже воспроизвести какой-либо переход при необходимости); и в качестве дополнительного бонуса история кадров сохраняет прежние параметры PageA, что позволяет вам вызывать Frame.GoBack для возврата к предыдущему состоянию PageA .
Это по замыслу в Prism, что никакие параметры не передаются обратно или потенциальная ошибка?