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