C# 如何在弹出窗口中用一个区域注册多个视图?

C# 如何在弹出窗口中用一个区域注册多个视图?,c#,wpf,prism,C#,Wpf,Prism,我有一份有菜单项的菜单。其中一些应该在一个弹出窗口中显示内容。每个菜单项都属于具有视图的模块。在这个弹出窗口中,我有一个区域,我想在其中显示视图。在我的例子中,第一个菜单项显示“FormVerionsView”,第二个菜单项显示“PopupContentRegion”中的“Publish”视图。问题是当我点击这两个菜单项中的任何一个时,弹出窗口是空的,并且没有显示任何视图 我使用.NETFramework 4.6.1、Prism 7.2.0.1367 我尝试过这个解决方案: 这是我的App.xa

我有一份有菜单项的菜单。其中一些应该在一个弹出窗口中显示内容。每个菜单项都属于具有视图的模块。在这个弹出窗口中,我有一个区域,我想在其中显示视图。在我的例子中,第一个菜单项显示“FormVerionsView”,第二个菜单项显示“PopupContentRegion”中的“Publish”视图。问题是当我点击这两个菜单项中的任何一个时,弹出窗口是空的,并且没有显示任何视图

我使用.NETFramework 4.6.1、Prism 7.2.0.1367

我尝试过这个解决方案:

这是我的App.xaml.cs文件的一部分

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

    protected override void RegisterTypes(IContainerRegistry containerRegistry)
    {
        containerRegistry.RegisterForNavigation<MainWindow>();
        containerRegistry.RegisterForNavigation<DefaultPopup>();
        containerRegistry.RegisterSingleton<IEventAggregator, EventAggregator>();
    }
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个视图,只有一个视图处于活动状态,具体取决于此命令的参数

我希望弹出窗口不会是空的,并且会有相应视图的内容


谢谢您的帮助。

如何创建初始化
popupWindow
?在
MainWindowViewModel
的构造函数中,您需要发布代码的所有相关部分。我添加了
MainWindowViewModel
的构造函数。告诉我你还需要从我的代码中看到什么。你的相关部分是什么?
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>();
    }
public MainWindowViewModel(IRegionManager regionManager, IEventAggregator eventAggregator, IUnityContainer unityContainer)
    {
        popupWindow = unityContainer.Resolve<DefaultPopup>();
        _regionManager = regionManager;
        eventAggregator.GetEvent<PopupWindowClosedEvent>().Subscribe(CloseDefaultPopupWindow);
    }
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();
    }