[Windows Phone 7.5] Evita la navegación circular con el NonLinealNavigationService

Hola a todos!

Un problema muy repetido en el desarrollo de Windows Phone es el de las navegaciones circulares. Si no lo has sufrido, afortunado. Normalmente, teniendo varias páginas, la navegación que realizas entre ella es lineal, es decir, de la pagina A vas a la B, de esta vuelves a A y puedes ir a C, vuelves a A y sales de la aplicación:

image

Este tipo de navegación no representa ningún problema. Usando el sistema standard de navegación (NavigationService) de Windows Phone, podemos usar el método Navigate para avanzar a una nueva página, quedando la página actual referenciada en la pila de navegación, por lo que, desde la página B podemos llamar al método GoBack del NavigationService y volveremos a la página inmediatamente anterior. Lo dicho, muy simple, pero ¿que pasa si tenemos una configuración más compleja?

Imaginad, los que no hayáis sufrido la navegación circular, la siguiente situación: Nuestra aplicación tiene una página principal desde la que podemos ir a varias páginas diferentes, B y C. En la página B tenemos una lista de elementos que nos llevan a la página D, desde esta página al seleccionar un elemento concreto, volvemos a B para añadirlo a la lista. Al hacer esta navegación, obtenemos un bucle circular:

image

El problema de esto es que, al ir navegando entre B y D, vamos añadiendo páginas a nuestra pila de navegación, después de varios items, veremos que si queremos volver a A, tendremos que deshacer toda la navegación circular entre B y D, con lo que el usuario no tendrá el camino lógico que sería volver de D a B y de B a A. Hemos dado con una navegación no lineal.

Para evitar este problema, en Diciembre, el equipo de desarrollo de Windows Phone publicó a través de su blog una “receta” consistente en un servicio llamado NonLinealNavigationService, podemos encontrar el código del servicio y el artículo original aquí. Básicamente se trata de un servicio que examina nuestra pila de navegación y si se va a añadir una página que ya existe en el mismo, el servicio se encargará de realizar una navegación hacia atrás recursiva para corregir el posible problema de bucle.

Uno de los problemas que encontraremos con esto es que, aunque queramos, no será posible crear modelos de navegación no lineal, el servicio lo evitará siempre.

Espero que os sea de ayuda este nuevo servicio.

Enlace al código del NonLineal Navigation Service

Artículo “Solving Circular Navigation in Windows Phone Silverlight Applications”

Windows Phone Dev Team Blog

Un Saludo y Happy Coding!

Un comentario en “[Windows Phone 7.5] Evita la navegación circular con el NonLinealNavigationService”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *