Esempio n. 1
0
        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);
 }
Esempio n. 3
0
 private void AttributeConditionChanged(object sender, TypeEventArgs e)
 {
     this.ConditionChanged?.Invoke(sender, e);
 }
        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);
                }
            }
        }