Каков наилучший метод для динамической загрузки Views из элемента управления Navigation в Prism?

2

Я реализовал навигацию через свое приложение, используя элемент управления Menu, который публикует событие с помощью 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) { }
}

Как вы оцениваете эту реализацию? Если вы считаете, что это отстой, помогите мне улучшить его или предложить лучшую альтернативу.

Теги:
wpf
prism

1 ответ

0
Лучший ответ

Я думаю, что у вас есть определенный недостаток в разделении проблем с этой моделью. Обычно я стараюсь держать презентацию в "Шелл". Посмотрите на этот вопрос, как я это реализую. Это упрощает и абстрагирует идею RegionManager от модулей:

Интеграция модулей с приложением в Prism aka CompositeWpf

Ещё вопросы

Сообщество Overcoder
Наверх
Меню