У меня есть меню с пунктами меню. Некоторые из них должны показывать контент в одном всплывающем окне. Каждый пункт меню принадлежит модулю с представлением. В этом всплывающем окне у меня есть один регион, в котором я хочу показать виды. В моем случае первый пункт меню показывает «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 представления, и только одно представление активно, зависит от параметраэта команда.
Я ожидаю, что всплывающее окно не будет пустым и будет содержимое соответствующего представления.
Спасибо за любую помощь.