Exemplo n.º 1
0
        private void ReloadViewInternal(Route route)
        {
            if (routeHead.Route == route)
            {
                try
                {
                    var view = route.CreateView(true);
                    routeHead.CachedView = view;
                    var frameworkElement = view as FrameworkElement;
                    if (frameworkElement != null && frameworkElement.DataContext == null)
                    {
                        frameworkElement.DataContext = route;
                    }

                    OnPropertyChanged(nameof(CurrentView));
                }
                catch (Exception ex)
                {
                    RouteErrorListener.TryOnRouteEventException(route, RouteEventType.ViewCreation, ex);
                }
            }
            else
            {
                var routeItem = stack.FirstOrDefault(item => item.Route == route);
                if (routeItem != null)
                {
                    routeItem.CachedView = null;
                }
            }
        }
Exemplo n.º 2
0
        private async Task <TaskCompletionSource <object> > PushRoute(Route route, bool cacheCurrentView,
                                                                      bool ignoreCurrent, List <RouteEventError> errors)
        {
            route.Routes = this;

            var currentRoute = Current;

            if (currentRoute != null && !cacheCurrentView)
            {
                routeHead.CachedView = null;
            }

            if (!ignoreCurrent && currentRoute != null)
            {
                try
                {
                    await currentRoute.OnRouteHiding();
                }
                catch (Exception ex)
                {
                    RouteErrorListener.TryOnRouteEventException(currentRoute, RouteEventType.Hiding, ex);
                }
            }

            try
            {
                await route.OnRouteInitializing();
            }
            catch (Exception ex)
            {
                errors.Add(new RouteEventError(RouteEventType.Initializing, ex));
                RouteErrorListener.TryOnRouteEventException(route, RouteEventType.Initializing, ex);
            }

            try
            {
                await route.OnRouteActivating();
            }
            catch (Exception ex)
            {
                errors.Add(new RouteEventError(RouteEventType.Activating, ex));
                RouteErrorListener.TryOnRouteEventException(route, RouteEventType.Activating, ex);
            }

            var item = new RouteItem(route);

            try
            {
                var view = route.CreateView(false);
                item.CachedView = view;
                var frameworkElement = view as FrameworkElement;
                if (frameworkElement != null && frameworkElement.DataContext == null)
                {
                    frameworkElement.DataContext = route;
                }
            }
            catch (Exception ex)
            {
                errors.Add(new RouteEventError(RouteEventType.ViewCreation, ex));
                RouteErrorListener.TryOnRouteEventException(route, RouteEventType.ViewCreation, ex);
            }

            stack.Push(item);
            RouteHead = item;

            if (!ignoreCurrent && currentRoute != null)
            {
                try
                {
                    await currentRoute.OnRouteHidden();
                }
                catch (Exception ex)
                {
                    RouteErrorListener.TryOnRouteEventException(currentRoute, RouteEventType.Hidden, ex);
                }
            }

            try
            {
                await route.OnRouteInitialized();
            }
            catch (Exception ex)
            {
                errors.Add(new RouteEventError(RouteEventType.Initialized, ex));
                RouteErrorListener.TryOnRouteEventException(route, RouteEventType.Initialized, ex);
            }

            try
            {
                await route.OnRouteActivated();
            }
            catch (Exception ex)
            {
                errors.Add(new RouteEventError(RouteEventType.Activated, ex));
                RouteErrorListener.TryOnRouteEventException(route, RouteEventType.Activated, ex);
            }

            return(item.CompletionSource);
        }