I am creating a module for an application of a foreign application. I'm building a window that will be my main module window. I create a menu and content region. I create a region for Content in the code and it works, but when I close my window and reopen it, I have the impression that the connection between the region and the hosting control disappears. My views seem to work, but they are not presented. If I delete the region and create it again it starts working. Maybe I'm doing something wrong or I don't understand something and I need clarification.
public class MyModule : IModule
{
public static string Name = "Test";
private readonly IUnityContainer unityContainer;
private readonly IAppNavigator appNavigator;
private readonly IShowMessage showMessage;
private readonly IShellNavigator shellNavigator;
public MyModule(IUnityContainer unityContainer
, IShellNavigator shellNavigator
, IAppNavigator appNavigator
, IShowMessage showMessage)
{
this.unityContainer = unityContainer;
this.shellNavigator = shellNavigator;
this.appNavigator = appNavigator;
this.showMessage = showMessage;
}
private string menuHeader = "MyModul";
private string menuDictionaries = "Słowniki";
private IRegionManager regionManager;
public void OnInitialized(IContainerProvider containerProvider)
{
this.regionManager = containerProvider.Resolve<IRegionManager>();
RegionAdapterMappings regionAdapterMappings = containerProvider.Resolve<RegionAdapterMappings>();
regionAdapterMappings.RegisterMapping(typeof(AccordionControl), containerProvider.Resolve<DxAccordionControlRegionAdapter>());
regionManager.RegisterViewWithRegion(RegionNames.AJ_AccordionRegion, typeof(TestModuleMenuView));
regionManager.RegisterViewWithRegion(RegionNames.AJ_ContentRegion, () => containerProvider.Resolve<ViewA>());
regionManager.RegisterViewWithRegion(RegionNames.AJ_ContentRegion, typeof(ViewB));
initializeNavigation();
}
public void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterSingleton<IApplicationCommands, Commands.ApplicationCommands>();
containerRegistry.RegisterForNavigation<ViewA, ViewAViewModel>();
containerRegistry.RegisterForNavigation<ViewB, ViewBViewModel>();
}
private void initializeNavigation()
{
shellNavigator.AddNavigationItem(nameof(menuDictionaries), menuHeader, menuDictionaries, () => ShowDictionaryViewExecuted(), () => CanExecuteDictionaryView(), () => _loggedOn, 1202);
}
private bool CanExecuteDictionaryView()
{
return _loggedOn;
}
private void ShowDictionaryViewExecuted()
{
try
{
appNavigator.ShowViewAsync(() => unityContainer.Resolve<DictionariesCardIndexView>(), new OpenViewParams()
{
ViewType = typeof(DictionariesCardIndexView).ToString(),
OpenFullScreen = true,
OpenMaximized = false,
OpenNewIfExists = false,
OpenUsingLastFrameParams = true,
ProgressDelay = 1,
ShowProgressControl = true,
//Size = new Size(500, 220)
Title = menuDictionaries
});
}
catch (Exception ex)
{
showMessage.ShowError(ex.Message);
}
}
}
<UserControl x:Class="Symfonia.PL.PS.RI.HM.Test.Views.DictionariesCardIndexView"
d:DesignHeight="450" d:DesignWidth="800"
mc:Ignorable="d">
<DockPanel>
<Border Margin="5" DockPanel.Dock="Left" BorderBrush="Black" BorderThickness="1">
<dxa:AccordionControl Name="AccordionControl"
Width="Auto"
prism:RegionManager.RegionName="{x:Static regions:RegionNames.AJ_AccordionRegion}"
AutoExpandAllItems="True"
ChildrenPath="Items"
CollapsedItemDisplayMode="Content"
CompactNavigation="False"
HeaderContent="{Binding SelectedRootItem.Header, RelativeSource={RelativeSource Self}}"
IsCollapseButtonVisible="False"
SelectedItemChanged="AccordionControl_OnSelectedItemChanged"
SelectedRootItemChanged="AccordionControl_OnSelectedRootItemChanged"
RootItemDisplayMode="Group"
ShowHeader="False"
SelectionUnit="SubItem"
ViewMode="Accordion"
RootItemExpandButtonPosition="None"
ExpandItemOnHeaderClick="False"
>
</dxa:AccordionControl>
</Border>
<ContentControl x:Name="ContentControl_AJ"/>
</DockPanel>
</UserControl>
using DevExpress.Xpf.Accordion;
using Prism.Regions;
using Symfonia.PL.PS.RI.HM.Test.Interfaces;
using Symfonia.PL.PS.RI.HM.Test.Navigations;
using Symfonia.PL.PS.RI.HM.Test.ViewModels;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
namespace Symfonia.PL.PS.RI.HM.Test.Views
{
public partial class DictionariesCardIndexView : UserControl
{
private readonly IRegionManager _regionManager;
private readonly IApplicationCommands _applicationCommands;
public DictionariesCardIndexView(DictionariesCardIndexViewModel dictionariesCardIndexViewModel, IApplicationCommands applicationCommands,
IRegionManager regionManager)
{
InitializeComponent();
_applicationCommands = applicationCommands;
_regionManager = regionManager;
SetRegionManager(regionManager, this.ContentControl_AJ, Regions.RegionNames.AJ_ContentRegion);
DataContext = dictionariesCardIndexViewModel;
}
void SetRegionManager(IRegionManager regionManager, DependencyObject regionTarget, string regionName)
{
//if (regionManager.Regions.ContainsRegionWithName(regionName))
//{
// IRegion region = regionManager.Regions[regionName];
// regionManager.Regions.Remove(regionName);
//}
RegionManager.SetRegionName(regionTarget, regionName);
RegionManager.SetRegionManager(regionTarget, regionManager);
}
}
}
The article Część 2: Regiony i RegionalManager was helpful, but did not dispel the confusion.