Каков наилучший метод динамической загрузки представлений из элемента управления навигацией в Prism
-
16-09-2019 - |
Вопрос
Я реализовал навигацию по своему приложению с помощью элемента управления меню, который публикует событие с помощью EventAggregator при нажатии на пункт меню.Что-то вроде того, как показано ниже,
this.eventAggregator.GetEvent<ViewRequestedEvent>()
.Publish(new BusinessObject.Model.MenuModel
{
Module = "Dashboard",
PresenterClass = "DashboardViewModel"
});
Большинство модулей в моем приложении являются подписчиками на это событие.Они используют фильтр для подписки только на те события, которые имеют отношение к Модулю
this.eventAggregator.GetEvent<ViewRequestedEvent>()
.Subscribe(LoadViewRequest, ThreadOption.UIThread, true, i => i.Module == "Dashboard");
Запрос на просмотр обрабатывается следующим образом:
private void LoadRequestedView(MenuModel menuItem)
{
try
{
IDashboardViewModel viewModel = this.container.Resolve(Type.GetType(menuItem.PresenterClass)) as IDashboardViewModel;
this.regionManager.Regions["ViewRegion"].Add(viewModel.View);
this.regionManager.Regions["ViewRegion"].Activate(viewModel.View);
this.eventAggregator.GetEvent<ViewNotificationEvent>().Publish(menuItem.Description);
}
catch (ResolutionFailedException) { }
}
Как вы оцениваете эту реализацию?Если вы считаете, что это отстой, помогите мне улучшить его или предложите лучшую альтернативу.
Решение
Я думаю, что у вас есть определенный недостаток в разделении проблем с этой моделью.Обычно я стараюсь поддерживать презентацию в Оболочке.Смотрите этот вопрос о том, как я могу это реализовать.Это упрощает работу и абстрагирует идею RegionManager от Модулей:
Интеграция модулей с приложением в Prism, также известном как CompositeWPF