Здравствуйте. Буквально неделю начал использовать wpf и с#, до этого был nodejs разработчиком.
Когда начал писать своей wpf приложение, то появилась идея менять страницы в главном окне.
Как я это реализовал в рамках mvvm:
Например, у нас есть 5 страниц, поэтому, я в главном xaml прописал для каждой свой DataTemplate с указанием view (User controls), т.е. как бы зарегистрировал их. Зарегистрировал 5 раз.
Далее в главной viewmodel я организовал CurrentView, где храню текущий viewmodel (user control) и, соответственно, при нажатии кнопки запускается команда, которая меняет CurrentView.
Все работает, но есть много минусов:
- Необходимость регистрировать для каждого view и viewmodel свой DataTemplate в Window.Resources. Т.е. если у меня 20 вьюшек, то это будет просто жесть.
- Для каждой кнопки, которая осуществляет навигацию необходимо создавать свою команду, которая будет менять view. У всех этих команд будет дублирование кода с разницей в одно слово.
- Нет возможности динамически добавлять страницы.
Какой самый простой способ реализовать нормальную управляемую навигацию. Кстати, пишу на своем mvvm велосипеде. Для маленького проекта не вижу смысла использовать prism или catel. MvvmLight, вообще походу запущен и документации нет. На сайте ссылки дают 403.
Да и так в учебных целях интересно посмотреть, поэтому не советуйте, пожалуйста, фреймворки.
Для "контейнера" страниц используй "Frame" (с параметром NavigationUIVisibility="Hidden").
Для самих страниц пиши классы наследованные от класса "Page".
Для отображения страницы: экземплярКлассаFrame.Navigate(экемплярКлассаСтраницы).
sharpb Для wpf так сразу и не вспомню. Можно посмотреть как это сделано на других xaml-платформах. UWP, WinPhone и т.д.. Там работа с frame немного отличается, но смысл тот же. Вот хороший пример для uwp https://github.com/worldbeater/MyFeed