0

Кто знает, где можно посмотреть подробный пример WPF или WPF Prism приложения с постраничной навигацией, организованной по типу мастера в Windows? Чтобы с кнопками "Вперед"/ "Назад"/"Готово". То что нашел - просто подмена View при нажатии на кнопку, в первом приближении похоже, но из руководства по Prism следует, что для таких приложений предполагается использование навигационного сервиса и навигационного журнала.
Нашел неплохой пример здесь, но он для MVVM Light. У меня это первая проба организовать постраничную навигацию, так что пример хотелось бы подробный.
Мой проект предполагает одну большую вью-модель, которая будет последовательно заполняться данными на нескольких окнах.

foxhound
  • 460
  • Например, так: https://ru.stackoverflow.com/a/740529/10105 – VladD Mar 18 '18 at 22:04
  • @VladD: Пытался сделать по схеме по ссылке. Не получается переход. Как лучше будет: мне вопрос апдейтить с кодом или попытаться объяснить на пальцах что не работает? – foxhound Mar 22 '18 at 19:43
  • Лучше пример с кодом, конечно. Поскольку на этот вопрос уже есть ответ, может быть, имеет смысл задать отдельный вопрос. – VladD Mar 22 '18 at 20:58
  • @VladD Вынес в отдельный вопрос: https://ru.stackoverflow.com/questions/803527/%D0%9F%D0%B5%D1%80%D0%B5%D1%85%D0%BE%D0%B4-%D1%81%D0%BE-%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B-%D0%BD%D0%B0-%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%83-%D0%B2-wpf – foxhound Mar 23 '18 at 09:53

1 Answers1

2

Иметь одну viewmodel для всех страниц не очень хорошая идея. Вы нарушаете принцип паттерна MVVM. Гораздо лучшим подходом будет иметь некий бизнес-объект, выделенный в отдельный класс, инстанс которого вы будете передавать каждой viewModel через dependency injection.

При таком подходе у вас не возникнет проблем с навигацией, поскольку использование сервиса навигации отлично ложится на такую архитектуру. Вы можете навигироваться на один и тот же регион многократно, заменяя активное представление. При этом вам будет доступна история и вы сможете вызывать навигацию на шаг назад через тот же самый сервис навигации.

  • "Иметь одну viewmodel для всех страниц не очень хорошая идея. Вы нарушаете принцип паттерна MVVM" Справедливости ради MVVM не единственный паттерн при работе с WPF –  Mar 19 '18 at 18:14
  • Вы правы, это я неправильно выразился. Будет именно так, как Вы написали. Будет одна сущность, которая будет заполняться на наверное десятке страниц. – foxhound Mar 19 '18 at 18:50
  • Тогда какая у вас проблема? – Anton Shakalo Mar 19 '18 at 21:25
  • @AntonShakalo проблема - как сделать навигацию со страницы на страницу. Вопрос не столько в том, как я буду тянуть сущность со страницы на страницу , сколько как сделать навигационный сервис. – foxhound Mar 22 '18 at 19:41
  • @Foggy Если уж мы говорим о вью-модели в вопросе, скорее всего автор использует именно MVVM, так что ответ в контексте MVVM вполне ок. – VladD Mar 23 '18 at 10:11
  • @foxhound вам не нужно делать навигационный сервис, prism уже всё сделал за вас https://prismlibrary.github.io/docs/wpf/Navigation.html – Anton Shakalo Mar 23 '18 at 10:30
  • @VladD контекст следующий: "одну большую вью-модель, которая будет последовательно заполняться данными на нескольких окнах." можно читать как один большой источник данных разбитый на компоненты. –  Mar 23 '18 at 14:45