Использование Prism для навигации в приложении Wpf
-
05-07-2019 - |
Вопрос
Я начинаю новый проект в Wpf и сейчас рассматриваю возможность использования Prism.Пока просто пытаюсь настроить навигацию приложения с помощью Prism.К сожалению, отсутствие опыта работы с фреймворком затрудняет начало работы.
Если быть более точным в отношении моей первой задачи, у меня есть приложение с регионом «навигация/меню» и «основным» регионом.Область навигации будет одинаковой для всех представлений основной области, поэтому я определяю меню в файлеshell.xaml.При нажатии на любой пункт меню я хотел бы добавить представление региона с помощью Prism.Первый;для этого обычно используют Prism?Если так;каков типичный подход?И я имею в виду на более структурном уровне..
У меня сложилось впечатление, что Prism в конечном итоге сделает мое приложение гораздо более масштабируемым, и я вижу, что получаю от него некоторые другие преимущества — например, контейнер IoC.Поэтому я хотел бы использовать его - если бы я мог сделать только первые шаги..
Решение
У меня есть пример, который использует немного больше ощущения CAG для модулей, вносящих вклад в меню и как добавлять представления в регион. Это должно прояснить ситуацию.
http://dl.getdropbox.com/u/376992/CAGMenus.zip р>
Надеюсь, это поможет, Андерсон
Другие советы
Бумбушка,
Prism станет для вас отличным способом достижения этой функциональности, и это довольно легко сделать, если вы понимаете принципы.
Я сделаю это так: добавлю прослушиватели событий в стартовое событие вашего основного региона.Когда вы выбираете свой элемент в меню, вы запускаете событие.Когда это произойдет, ваш основной регион обработает событие, и вы удалите текущее представление из основного региона.Затем создайте новое представление, которое хотите использовать, и добавьте его.
Ваш основной регион должен выглядеть примерно так:
public void Initialize()
{
Events.PageEvents.ClickedEvent1 ce1 = this.eventAggregator.GetEvent<Events.PageEvents.ClickedEvent1>();
ce1.Subscribe(LoadView, ThreadOption.UIThread, true);
}
private void LoadView(Events.HomePageEvents.Clicked clicked1)
{
IRegion mainRegion = RegionManager.Regions["MainRegion"];
foreach (object view in new List<object>mainRegion.Views))
{
RegionManager.Regions["MainRegion"].Remove(view);
}
IModule firstModule = Container.Resolve<Modules.FirstModule>();
firstModuleModules.Initialize();
}
Я надеюсь, что это укажет вам правильное направление.Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.