private void InterceptorConditionChanged(object sender, TypeEventArgs e) { var indexOfChangedType = this.interceptedViewTypes.IndexOf(e.Type); if (indexOfChangedType >= 0) { var frame = this.GetFrame(); var vmType = this.viewModelLocator.GetAssociatedViewModelType(e.Type); var intercepted = this.InterceptNavigationForward(e.Type, vmType); if (intercepted) { // the navigation should now be intercepted, if the navigation did occur, remove it from stack / go back if it is last page var inStack = frame.BackStack.FirstOrDefault(p => p.SourcePageType == e.Type); if (inStack != null) { frame.BackStack.Remove(inStack); } else if (frame.CurrentSourcePageType == e.Type) { frame.GoBack(); } } else if (this.BackStackPageTypes.FirstOrDefault(t => t == e.Type) == null) { // the navigation should not be intercepted, if navigation didn't occur, insert it into backstack / navigate to it if it's last page var backTypes = this.BackStackPageTypes.ToList(); for (int i = 0; i < backTypes.Count; i++) { if (indexOfChangedType < this.interceptedViewTypes.IndexOf(backTypes[i])) { frame.BackStack.Insert(i, new PageStackEntry(e.Type, null, null)); return; } } frame.Navigate(e.Type); } } }
private void AttributeConditionChanged(object sender, TypeEventArgs e) { this.ConditionChanged?.Invoke(sender, e); }