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

StackOverflow https://stackoverflow.com/questions/1678423

  •  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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top