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:
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:
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”
Un Saludo y Happy Coding!
Vamos con una segunda retahíla de enlaces relacionados con Windows Phone 7.5 (Mango). En este caso y