public IRegionManager RegisterView <TView, TViewModel>( string regionName, TViewModel viewModel, bool containsNestedRegion, out Guid guid, IRegionManager parentRegionManager = null) where TView : class, IView where TViewModel : class, INotifyPropertyChanged, IActivable { var registredView = Views.SingleOrDefault(x => x.ViewName == RegistredView <TView, TViewModel> .GetViewName(regionName, viewModel)); if (registredView == null) { IRegionManager actualRegionManager = null; if (parentRegionManager != null) { actualRegionManager = parentRegionManager; } else { actualRegionManager = regionManagers.Single(x => x.Regions.Any(y => y.Name == regionName)); } if (actualRegionManager.Regions.Count(x => x.Name == regionName) == 0) { throw new Exception($"RegionManager does not contains region {regionName}"); } var view = Application.Current?.Dispatcher?.Invoke(() => { return(CreateView <TView, TViewModel>(regionName, viewModel, actualRegionManager, containsNestedRegion)); }); Views.Add(view); guid = view.Guid; SubscribeToChanges(view); var regionManager = view.RegionManager; if (regionManager != null) { regionManagers.Add(regionManager); } return(regionManager); } else if (registredView is RegistredView <TView, TViewModel> view) { view.ViewModel = viewModel; guid = view.Guid; SubscribeToChanges(view); return(view.RegionManager); } else { throw new NotImplementedException(); } }