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)); }
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; } }
/// <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)); }
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); }
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))); }
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; } }
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); }
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); }
public void ActivateNullViewThrows() { var ex = Assert.Throws <ArgumentNullException>(() => { IRegion region = new Region(); region.Activate(null); }); }
public void ActivateNonAddedViewThrows() { var ex = Assert.Throws <ArgumentException>(() => { IRegion region = new Region(); object nonAddedView = new object(); region.Activate(nonAddedView); }); }
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); }
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)); }
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; } }