Ejemplo n.º 1
0
        public void WhenIRegionMemberLifetimeItemReturnsKeepAliveFalseCanRemoveFromRegion()
        {
            // Arrange
            var regionItemMock = new Mock <IRegionMemberLifetime>();

            regionItemMock.Setup(i => i.KeepAlive).Returns(false);

            var view = regionItemMock.Object;

            Region.Add(view);
            Region.Activate(view);

            // The presence of the following two lines is essential for the test:
            // we want to access both ActiveView and Views in that order
            Assert.True(Region.ActiveViews.Contains(view));
            Assert.True(Region.Views.Contains(view));

            // Act
            // This may throw
            Region.Remove(view);

            // Assert
            Assert.False(Region.Views.Contains(view));
            Assert.False(Region.ActiveViews.Contains(view));
        }
Ejemplo n.º 2
0
 private void HostControlSelectionChanged(object sender, SelectionChangedEventArgs e)
 {
     try
     {
         _updatingActiveViewsInHostControlSelectionChanged = true;
         if (e.OriginalSource != sender)
         {
             return;
         }
         foreach (var view in e.RemovedItems)
         {
             if (Region.Views.Contains(view) && Region.ActiveViews.Contains(view))
             {
                 Region.Deactivate(view);
             }
         }
         foreach (var view in e.AddedItems)
         {
             if (Region.Views.Contains(view) && !Region.ActiveViews.Contains(view))
             {
                 Region.Activate(view);
             }
         }
     }
     finally
     {
         _updatingActiveViewsInHostControlSelectionChanged = false;
     }
 }
Ejemplo n.º 3
0
        /// <summary>
        /// Activates the appropriate Views in the Region whenever the Active Content
        /// changes in the Docking Manager.
        /// </summary>
        private void DockingManager_ActiveContentChanged(object sender, EventArgs e)
        {
            try
            {
                m_UpdatingActiveViewsInManagerActiveContentChanged = true;
                if (m_DockingManager == sender)
                {
                    var activeContent = m_DockingManager.ActiveContent;
                    foreach (var item in Region.ActiveViews.Where(it => it != activeContent))
                    {
                        if (item != null &&
                            Region.Views.Contains(item) &&
                            Region.ActiveViews.Contains(item))
                        {
                            Region.Deactivate(item);
                        }
                    }

                    if (activeContent != null &&
                        Region.Views.Contains(activeContent) &&
                        !Region.ActiveViews.Contains(activeContent))
                    {
                        Region.Activate(activeContent);
                    }
                }
            }
            finally
            {
                m_UpdatingActiveViewsInManagerActiveContentChanged = false;
            }
        }
        public virtual void RemovesOnlyDeactivatedItemsInRegionBasedOnDataContextKeepAlive()
        {
            // Arrange
            var retionItemDataContextToKeepAlive = new Mock <IRegionMemberLifetime>();

            retionItemDataContextToKeepAlive.Setup(i => i.KeepAlive).Returns(true);

            var regionItemToKeepAlive = new MockFrameworkElement();

            regionItemToKeepAlive.DataContext = retionItemDataContextToKeepAlive.Object;
            Region.Add(regionItemToKeepAlive);
            Region.Activate(regionItemToKeepAlive);

            var regionItemMock = new Mock <IRegionMemberLifetime>();

            regionItemMock.Setup(i => i.KeepAlive).Returns(false);

            var regionItem = new MockFrameworkElement();

            regionItem.DataContext = regionItemMock.Object;

            Region.Add(regionItem);
            Region.Activate(regionItem);

            // Act
            Region.Deactivate(regionItem);

            // Assert
            Assert.IsFalse(Region.Views.Contains(regionItem));
            Assert.IsTrue(Region.Views.Contains(regionItemToKeepAlive));
        }
Ejemplo n.º 5
0
        private void ActivateView(string viewName)
        {
            dynamic view = null;

            switch (viewName)
            {
            case nameof(StudentView):
                view = _unityContainer.Resolve <StudentView>();
                break;

            case nameof(EmployeeView):
                view = _unityContainer.Resolve <EmployeeView>();
                break;

            default:
                break;
            }

            if (_regionManager.Regions["MainRegion"].GetView(nameof(view)) != null)
            {
                Region.Remove(_regionManager.Regions["MainRegion"].GetView(nameof(view)));
            }
            _regionManager.Regions["MainRegion"].Add(view, nameof(view));
            Region.Activate(view);
        }
Ejemplo n.º 6
0
        private void ExecuteNavigation(INavigationContext navigationContext, object[] activeViews, Action <IRegionNavigationResult> navigationCallback)
        {
            try
            {
                NotifyActiveViewsNavigatingFrom(navigationContext, activeViews);

                var view = (VisualElement)_regionNavigationContentLoader.LoadContent(Region, navigationContext);

                // Raise the navigating event just before activating the view.
                RaiseNavigating(navigationContext);

                Region.Activate(view);

                // Update the navigation journal before notifying others of navigation
                IRegionNavigationJournalEntry journalEntry = _container.Resolve <IRegionNavigationJournalEntry>();
                journalEntry.Uri        = navigationContext.Uri;
                journalEntry.Parameters = navigationContext.Parameters;

                bool persistInHistory = PersistInHistory(view);

                Journal.RecordNavigation(journalEntry, persistInHistory);

                // The view can be informed of navigation
                MvvmHelpers.OnNavigatedTo(view, navigationContext);

                navigationCallback(new RegionNavigationResult(navigationContext, true));

                // Raise the navigated event when navigation is completed.
                RaiseNavigated(navigationContext);
            }
            catch (Exception e)
            {
                NotifyNavigationFailed(navigationContext, navigationCallback, e);
            }
        }
        private void OnSelectionChanged(object sender, RadSelectionChangedEventArgs e)
        {
            // e.OriginalSource == null, that's why we use sender.
            if (_hostControl == sender)
            {
                foreach (RadTabItem tabItem in e.RemovedItems)
                {
                    var item = GetContainedItem(tabItem);

                    // check if the view is in both Views and ActiveViews collections (there may be out of sync)
                    if (Region.Views.Contains(item) && Region.ActiveViews.Contains(item))
                    {
                        Region.Deactivate(item);
                    }
                }

                foreach (RadTabItem tabItem in e.AddedItems)
                {
                    var item = GetContainedItem(tabItem);
                    if (!Region.ActiveViews.Contains(item) && Region.Views.Contains(item))
                    {
                        Region.Activate(item);
                    }
                }
            }
        }
 private void HostRibbonOnSelectedTabChanged(object sender, SelectionChangedEventArgs selectionChangedEventArgs)
 {
     if (_hostRibbon.SelectedTabItem != null)
     {
         Region.Activate(_hostRibbon.SelectedTabItem);
     }
 }
        public void WhenNavigatingFromViewThatIsNavigationAware_ThenNotifiesActiveViewNavigatingFrom()
        {
            // Arrange
            var region   = new Region();
            var viewMock = new Mock <INavigationAware>();
            var view     = viewMock.Object;

            region.Add(view);

            var view2 = new object();

            region.Add(view2);

            region.Activate(view);

            var serviceLocatorMock = new Mock <IServiceLocator>();

            serviceLocatorMock.Setup(x => x.GetInstance <IRegionNavigationJournalEntry>()).Returns(new RegionNavigationJournalEntry());

            var             navigationUri  = new Uri(view2.GetType().Name, UriKind.Relative);
            IServiceLocator serviceLocator = serviceLocatorMock.Object;
            RegionNavigationContentLoader contentLoader = new Mock <RegionNavigationContentLoader>(serviceLocator).Object;
            IRegionNavigationJournal      journal       = new Mock <IRegionNavigationJournal>().Object;

            RegionNavigationService target = new RegionNavigationService(serviceLocator, contentLoader, journal);

            target.Region = region;

            // Act
            target.RequestNavigate(navigationUri, nr => { });

            // Verify
            viewMock.Verify(v => v.OnNavigatedFrom(It.Is <NavigationContext>(ctx => ctx.Uri == navigationUri && ctx.Parameters.Count() == 0)));
        }
Ejemplo n.º 10
0
        private void ManagerActiveContentChanged(object sender, EventArgs e)
        {
            try
            {
                _updatingActiveViewsInManagerActiveContentChanged = true;

                if (_dockingManager == sender)
                {
                    object activeContent = _dockingManager.ActiveContent;
                    foreach (var item in Region.ActiveViews.Where(it => it != activeContent))
                    {
                        Region.Deactivate(item);
                    }


                    if (Region.Views.Contains(activeContent) && !Region.ActiveViews.Contains(activeContent))
                    {
                        Region.Activate(activeContent);
                    }
                }
            }
            finally
            {
                _updatingActiveViewsInManagerActiveContentChanged = false;
            }
        }
Ejemplo n.º 11
0
        public void ActivateNonAddedViewThrows()
        {
            IRegion region = new Region();

            object nonAddedView = new object();

            region.Activate(nonAddedView);
        }
        public void WhenViewModelAcceptsNavigationOutAfterNewIncomingRequestIsReceived_ThenOriginalRequestIsIgnored()
        {
            var region = new Region();

            var viewModelMock = new Mock <IConfirmNavigationRequest>();

            var viewMock = new Mock <FrameworkElement>();
            var view     = viewMock.Object;

            view.DataContext = viewModelMock.Object;

            var confirmationRequests = new List <Action <bool> >();

            viewModelMock
            .Setup(icnr => icnr.ConfirmNavigationRequest(It.IsAny <NavigationContext>(), It.IsAny <Action <bool> >()))
            .Callback <NavigationContext, Action <bool> >((nc, c) => { confirmationRequests.Add(c); });

            region.Add(view);
            region.Activate(view);

            var navigationUri = new Uri("", UriKind.Relative);

            var containerMock = new Mock <IContainerExtension>();

            containerMock
            .Setup(x => x.Resolve(typeof(IRegionNavigationJournalEntry)))
            .Returns(new RegionNavigationJournalEntry());

            var contentLoaderMock = new Mock <IRegionNavigationContentLoader>();

            contentLoaderMock
            .Setup(cl => cl.LoadContent(region, It.IsAny <NavigationContext>()))
            .Returns(view);

            var container     = containerMock.Object;
            var contentLoader = contentLoaderMock.Object;
            var journal       = new Mock <IRegionNavigationJournal>().Object;

            var target = new RegionNavigationService(container, contentLoader, journal)
            {
                Region = region
            };

            bool firstNavigation  = false;
            bool secondNavigation = false;

            target.RequestNavigate(navigationUri, nr => firstNavigation  = nr.Result.Value);
            target.RequestNavigate(navigationUri, nr => secondNavigation = nr.Result.Value);

            Assert.Equal(2, confirmationRequests.Count);

            confirmationRequests[0](true);
            confirmationRequests[1](true);

            Assert.False(firstNavigation);
            Assert.True(secondNavigation);
        }
Ejemplo n.º 13
0
        public void Activate()
        {
            Region.Activate(RegisterView());

            if (ViewModel is IActivable activable && !activable.IsActive)
            {
                activable.IsActive = true;
            }
        }
        private void HostControlOnTabSelectionChanged(object sender, EventArgs eventArgs)
        {
            if (this._hostControl.SelectedTabItem == null)
            {
                return;
            }

            Region.Activate(this._hostControl.SelectedTabItem);
        }
Ejemplo n.º 15
0
        public void ActivateNullViewThrows()
        {
            var ex = Assert.Throws <ArgumentNullException>(() =>
            {
                IRegion region = new Region();

                region.Activate(null);
            });
        }
Ejemplo n.º 16
0
        public void ActivateNonAddedViewThrows()
        {
            var ex = Assert.Throws <ArgumentException>(() =>
            {
                IRegion region = new Region();

                object nonAddedView = new object();

                region.Activate(nonAddedView);
            });
        }
Ejemplo n.º 17
0
 protected void OnHeaderChanged(object header)
 {
     if (header != null)
     {
         var activeView = Region?.ActiveViews.FirstOrDefault();
         if (activeView != header)
         {
             Region?.Activate(header);
         }
     }
 }
        public void WhenViewAcceptsNavigationOutAfterNewIncomingRequestIsReceived_ThenOriginalRequestIsIgnored()
        {
            var region = new Region();

            var viewMock = new Mock <IConfirmNavigationRequest>();
            var view     = viewMock.Object;

            var confirmationRequests = new List <Action <bool> >();

            viewMock
            .Setup(icnr => icnr.ConfirmNavigationRequest(It.IsAny <NavigationContext>(), It.IsAny <Action <bool> >()))
            .Callback <NavigationContext, Action <bool> >((nc, c) => { confirmationRequests.Add(c); });

            region.Add(view);
            region.Activate(view);

            var navigationUri = new Uri("", UriKind.Relative);

            var serviceLocatorMock = new Mock <IServiceLocator>();

            serviceLocatorMock
            .Setup(x => x.GetInstance <IRegionNavigationJournalEntry>())
            .Returns(new RegionNavigationJournalEntry());

            var contentLoaderMock = new Mock <IRegionNavigationContentLoader>();

            contentLoaderMock
            .Setup(cl => cl.LoadContent(region, It.IsAny <NavigationContext>()))
            .Returns(view);

            var serviceLocator = serviceLocatorMock.Object;
            var contentLoader  = contentLoaderMock.Object;
            var journal        = new Mock <IRegionNavigationJournal>().Object;

            var target = new RegionNavigationService(serviceLocator, contentLoader, journal);

            target.Region = region;

            bool firstNavigation  = false;
            bool secondNavigation = false;

            target.RequestNavigate(navigationUri, nr => firstNavigation  = nr.Result.Value);
            target.RequestNavigate(navigationUri, nr => secondNavigation = nr.Result.Value);

            Assert.AreEqual(2, confirmationRequests.Count);

            confirmationRequests[0](true);
            confirmationRequests[1](true);

            Assert.IsFalse(firstNavigation);
            Assert.IsTrue(secondNavigation);
        }
Ejemplo n.º 19
0
        public void RemovingViewAlsoRemovesItFromActiveViews()
        {
            IRegion region = new Region();
            object  model  = new object();

            region.Add(model);
            region.Activate(model);
            Assert.True(region.ActiveViews.Contains(model));

            region.Remove(model);

            Assert.False(region.ActiveViews.Contains(model));
        }
        void DockManager_ActivePaneChanged(object sender, RoutedPropertyChangedEventArgs <ContentPane> e)
        {
            if (e.OldValue != null)
            {
                var item = e.OldValue;

                //are we dealing with a ContentPane directly
                if (Region.Views.Contains(item) && Region.ActiveViews.Contains(item))
                {
                    Region.Deactivate(item);
                }
                else
                {
                    //now check to see if we have any views that were injected
                    var contentControl = item as ContentControl;
                    if (contentControl != null)
                    {
                        var injectedView = contentControl.Content;
                        if (Region.Views.Contains(injectedView) && Region.ActiveViews.Contains(injectedView))
                        {
                            Region.Deactivate(injectedView);
                        }
                    }
                }
            }

            if (e.NewValue != null)
            {
                var item = e.NewValue;

                //are we dealing with a ContentPane directly
                if (Region.Views.Contains(item) && !this.Region.ActiveViews.Contains(item))
                {
                    Region.Activate(item);
                }
                else
                {
                    //now check to see if we have any views that were injected
                    var contentControl = item as ContentControl;
                    if (contentControl != null)
                    {
                        var injectedView = contentControl.Content;
                        if (Region.Views.Contains(injectedView) && !this.Region.ActiveViews.Contains(injectedView))
                        {
                            Region.Activate(injectedView);
                        }
                    }
                }
            }
        }
        private void DocumentRegionActiveAwareBehavior_ActiveDocumentChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            if (e.OldValue != null)
            {
                var item = e.OldValue;

                //are we dealing with a ContentPane directly
                if (Region.Views.Contains(item) && Region.ActiveViews.Contains(item))
                {
                    Region.Deactivate(item);
                }
                else
                {
                    //now check to see if we have any views that were injected
                    var contentControl = item as ContentControl;
                    if (contentControl != null)
                    {
                        var injectedView = contentControl.Content;
                        if (Region.Views.Contains(injectedView) && Region.ActiveViews.Contains(injectedView))
                        {
                            Region.Deactivate(injectedView);
                        }
                    }
                }
            }

            if (e.NewValue != null)
            {
                var item = e.NewValue;

                //are we dealing with a ContentPane directly
                if (Region.Views.Contains(item) && !this.Region.ActiveViews.Contains(item))
                {
                    Region.Activate(item);
                }
                else
                {
                    //now check to see if we have any views that were injected
                    var contentControl = item as ContentControl;
                    if (contentControl != null)
                    {
                        var injectedView = contentControl.Content;
                        if (Region.Views.Contains(injectedView) && !this.Region.ActiveViews.Contains(injectedView))
                        {
                            Region.Activate(injectedView);
                        }
                    }
                }
            }
        }
        public virtual void WillNotRemoveDeactivatedItemIfKeepAliveAttributeTrue()
        {
            // Arrange
            var regionItem = new RegionMemberKeptAlive();

            Region.Add(regionItem);
            Region.Activate(regionItem);

            // Act
            Region.Deactivate(regionItem);

            // Assert
            Assert.IsTrue(Region.Views.Contains((object)regionItem));
        }
        public void WhenRequestNavigateAwayOnDataContextRejectsThroughCallback_ThenNavigationDoesNotProceed()
        {
            // Prepare
            var region = new Region();

            var view1DataContextMock = new Mock <IConfirmNavigationRequest>();

            view1DataContextMock
            .Setup(ina => ina.ConfirmNavigationRequest(It.IsAny <NavigationContext>(), It.IsAny <Action <bool> >()))
            .Callback <NavigationContext, Action <bool> >((nc, c) => c(false))
            .Verifiable();

            var view1Mock = new Mock <FrameworkElement>();
            var view1     = view1Mock.Object;

            view1.DataContext = view1DataContextMock.Object;

            var view2 = new object();

            region.Add(view1);
            region.Add(view2);

            region.Activate(view1);

            var navigationUri = new Uri(view2.GetType().Name, UriKind.Relative);

            var containerMock = new Mock <IContainerExtension>();

            containerMock.Setup(x => x.Resolve(typeof(IRegionNavigationJournalEntry))).Returns(new RegionNavigationJournalEntry());

            IContainerExtension           container     = containerMock.Object;
            RegionNavigationContentLoader contentLoader = new Mock <RegionNavigationContentLoader>(container).Object;
            IRegionNavigationJournal      journal       = new Mock <IRegionNavigationJournal>().Object;

            RegionNavigationService target = new RegionNavigationService(container, contentLoader, journal)
            {
                Region = region
            };

            // Act
            var navigationFailed = false;

            target.RequestNavigate(navigationUri, nr => { navigationFailed = nr.Result == false; });

            // Verify
            view1DataContextMock.VerifyAll();
            Assert.True(navigationFailed);
            Assert.Equal(new object[] { view1 }, region.ActiveViews.ToArray());
        }
        public void WhenRequestNavigateAwayOnDataContextAcceptsThroughCallback_ThenNavigationProceeds()
        {
            // Prepare
            var region = new Region();

            var view1DataContextMock = new Mock <IConfirmNavigationRequest>();

            view1DataContextMock
            .Setup(ina => ina.ConfirmNavigationRequest(It.IsAny <NavigationContext>(), It.IsAny <Action <bool> >()))
            .Callback <NavigationContext, Action <bool> >((nc, c) => c(true))
            .Verifiable();

            var view1Mock = new Mock <FrameworkElement>();
            var view1     = view1Mock.Object;

            view1.DataContext = view1DataContextMock.Object;

            var view2 = new object();

            region.Add(view1);
            region.Add(view2);

            region.Activate(view1);

            var navigationUri = new Uri(view2.GetType().Name, UriKind.Relative);

            var serviceLocatorMock = new Mock <IServiceLocator>();

            serviceLocatorMock.Setup(x => x.GetInstance <IRegionNavigationJournalEntry>()).Returns(new RegionNavigationJournalEntry());

            IServiceLocator serviceLocator = serviceLocatorMock.Object;
            RegionNavigationContentLoader contentLoader = new RegionNavigationContentLoader(serviceLocator);
            IRegionNavigationJournal      journal       = new Mock <IRegionNavigationJournal>().Object;

            RegionNavigationService target = new RegionNavigationService(serviceLocator, contentLoader, journal);

            target.Region = region;

            // Act
            var navigationSucceeded = false;

            target.RequestNavigate(navigationUri, nr => { navigationSucceeded = nr.Result == true; });

            // Verify
            view1DataContextMock.VerifyAll();
            Assert.IsTrue(navigationSucceeded);
            CollectionAssert.AreEqual(new object[] { view1, view2 }, region.ActiveViews.ToArray());
        }
        public void WhenIRegionMemberLifetimeItemReturnsKeepAliveTrueDoesNotRemoveOnDeactivation()
        {
            // Arrange
            var regionItemMock = new Mock <IRegionMemberLifetime>();

            regionItemMock.Setup(i => i.KeepAlive).Returns(true);

            Region.Add(regionItemMock.Object);
            Region.Activate(regionItemMock.Object);

            // Act
            Region.Deactivate(regionItemMock.Object);

            // Assert
            Assert.IsTrue(Region.Views.Contains(regionItemMock.Object));
        }
        public void WhenIRegionMemberLifetimeItemReturnsKeepAliveFalseRemovesWhenInactive()
        {
            // Arrange
            var regionItemMock = new Mock <IRegionMemberLifetime>();

            regionItemMock.Setup(i => i.KeepAlive).Returns(false);

            Region.Add(regionItemMock.Object);
            Region.Activate(regionItemMock.Object);

            // Act
            Region.Deactivate(regionItemMock.Object);

            // Assert
            Assert.IsFalse(Region.Views.Contains(regionItemMock.Object));
        }
        public void WhenNavigationFromViewThatIsNavigationAware_OnlyNotifiesOnNavigateFromForActiveViews()
        {
            // Arrange

            bool navigationFromInvoked = false;

            var region = new Region();

            var viewMock = new Mock <INavigationAware>();

            viewMock
            .Setup(x => x.OnNavigatedFrom(It.IsAny <NavigationContext>())).Callback(() => navigationFromInvoked = true);
            var view = viewMock.Object;

            region.Add(view);

            var targetViewMock = new Mock <INavigationAware>();

            region.Add(targetViewMock.Object);

            var activeViewMock = new Mock <INavigationAware>();

            region.Add(activeViewMock.Object);

            region.Activate(activeViewMock.Object);

            var containerMock = new Mock <IContainerExtension>();

            containerMock.Setup(x => x.Resolve(typeof(IRegionNavigationJournalEntry))).Returns(new RegionNavigationJournalEntry());

            var navigationUri = new Uri(targetViewMock.Object.GetType().Name, UriKind.Relative);
            IContainerExtension           container     = containerMock.Object;
            RegionNavigationContentLoader contentLoader = new Mock <RegionNavigationContentLoader>(container).Object;
            IRegionNavigationJournal      journal       = new Mock <IRegionNavigationJournal>().Object;

            RegionNavigationService target = new RegionNavigationService(container, contentLoader, journal)
            {
                Region = region
            };

            // Act
            target.RequestNavigate(navigationUri, nr => { });

            // Verify
            Assert.False(navigationFromInvoked);
        }
        public virtual void WillRemoveDeactivatedItemIfDataContextKeepAliveAttributeFalse()
        {
            // Arrange
            var regionItemDataContext = new RegionMemberNotKeptAlive();
            var regionItem            = new MockFrameworkElement()
            {
                DataContext = regionItemDataContext
            };

            Region.Add(regionItem);
            Region.Activate(regionItem);

            // Act
            Region.Deactivate(regionItem);

            // Assert
            Assert.IsFalse(Region.Views.Contains(regionItem));
        }
        public virtual void RemovesRegionItemIfDataContextReturnsKeepAliveFalse()
        {
            // Arrange
            var regionItemMock = new Mock <IRegionMemberLifetime>();

            regionItemMock.Setup(i => i.KeepAlive).Returns(false);

            var regionItem = new MockFrameworkElement();

            regionItem.DataContext = regionItemMock.Object;

            Region.Add(regionItem);
            Region.Activate(regionItem);

            // Act
            Region.Deactivate(regionItem);

            // Assert
            Assert.IsFalse(Region.Views.Contains(regionItem));
        }
Ejemplo n.º 30
0
 private void OnViewsCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
 {
     if (_updating)
     {
         return;
     }
     try
     {
         _updating = true;
         if (e.Action == NotifyCollectionChangedAction.Add)
         {
             foreach (var childItem in e.NewItems.OfType <Control>())
             {
                 if (_hostControl.Screens.Contains(childItem))
                 {
                     continue;
                 }
                 _hostControl.AddScreen(childItem);
                 var activeAware = childItem as IActiveAware;
                 if ((_hostControl.CurrentScreen == null) && (activeAware != null) && activeAware.IsActive)
                 {
                     Region.Activate(childItem);
                 }
             }
         }
         else if (e.Action == NotifyCollectionChangedAction.Remove)
         {
             foreach (var childItem in e.OldItems.OfType <Control>())
             {
                 if (_hostControl.Screens.Contains(childItem))
                 {
                     _hostControl.RemoveScreen(childItem);
                 }
             }
         }
     }
     finally
     {
         _updating = false;
     }
 }