Как зарегистрировать больше просмотров с одним регионом во всплывающем окне? - PullRequest
0 голосов
/ 01 октября 2019

У меня есть меню с пунктами меню. Некоторые из них должны показывать контент в одном всплывающем окне. Каждый пункт меню принадлежит модулю с представлением. В этом всплывающем окне у меня есть один регион, в котором я хочу показать виды. В моем случае первый пункт меню показывает «FormVerionsView», второй пункт меню показывает представление «Опубликовать» в «PopupContentRegion». Проблема в том, что когда я нажимаю на любой из этих двух пунктов меню, всплывающее окно пустое, и ни одно из представлений не отображается.

Я использую .NET Framework 4.6.1, Prism 7.2.0.1367.

Я пробовал это решение:

Вот часть моего App.xaml. cs file

protected override Window CreateShell()
    {
        return Container.Resolve<MainWindow>();
    }

    protected override void RegisterTypes(IContainerRegistry containerRegistry)
    {
        containerRegistry.RegisterForNavigation<MainWindow>();
        containerRegistry.RegisterForNavigation<DefaultPopup>();
        containerRegistry.RegisterSingleton<IEventAggregator, EventAggregator>();
    }

Вот часть моего файла DefaultPopup.xaml

<ContentControl prism:RegionManager.RegionName="{x:Static regNames:RegionNames.PopupContentRegion}"></ContentControl>

У меня есть 2 модуля с одним представлением в каждом модуле. Вот часть модуля FormVerions

public void OnInitialized(IContainerProvider containerProvider)
    {
        var popupRegion = new SingleActiveRegion();
        popupRegion.Add(typeof(FormVersionsView), "FormVersionsView");
        _regionManager.Regions.Add(RegionNames.PopupContentRegion, popupRegion);
    }
public void RegisterTypes(IContainerRegistry containerRegistry)
    {
        containerRegistry.RegisterForNavigation<FormVersionsView>();

    }

Вот часть модуля публикации

public void OnInitialized(IContainerProvider containerProvider)
    {
        if (_regionManager.Regions.ContainsRegionWithName(RegionNames.PopupContentRegion))
        {
            _regionManager.Regions[RegionNames.PopupContentRegion].Add(typeof(Views.Publish), "Publish");
        }
    }

    public void RegisterTypes(IContainerRegistry containerRegistry)
    {
        containerRegistry.RegisterForNavigation<Views.Publish>();
    }

Инициализация popupWindow находится в конструкторе моего MainWidowViewModel

public MainWindowViewModel(IRegionManager regionManager, IEventAggregator eventAggregator, IUnityContainer unityContainer)
    {
        popupWindow = unityContainer.Resolve<DefaultPopup>();
        _regionManager = regionManager;
        eventAggregator.GetEvent<PopupWindowClosedEvent>().Subscribe(CloseDefaultPopupWindow);
    }

В MainwindowViewModel у меня есть OpenCommand, который должен открывать всплывающее окно с соответствующим представлением.

void ExecuteOpenCommand(string navigatePath)
    {
        if (_regionManager.Regions.ContainsRegionWithName(RegionNames.PopupContentRegion))
        {
            var view = _regionManager.Regions[RegionNames.PopupContentRegion].GetView(navigatePath);
            _regionManager.Regions[RegionNames.PopupContentRegion].Activate(view);                
        }
        _regionManager.RequestNavigate(RegionNames.PopupContentRegion, navigatePath);             
        popupWindow.ShowDialog();
    }

После выполнения этого кода у «PopupContentRegion» есть 2 представления, и только одно представление активно, зависит от параметраэта команда.

Я ожидаю, что всплывающее окно не будет пустым и будет содержимое соответствующего представления.

Спасибо за любую помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...