Manejando en botón Atrás en Windows Phone 8.1

Como sabemos, Windows Phone dispone de botones hardware (ahora también en pantalla con la versión 8.1) para ir a Inicio, buscar o navegar hacia atrás en las aplicaciones. Una práctica común entre los desarrolladores es capturar el evento de navegación atrás para realizar acciones específicas que requiera la aplicación.

En las aplicaciones Store Applications con Windows Phone 8.1 (WinRT) el modelo cambia comparado a cómo lo hacíamos con Windows Phone 7/8 Silverlight. En este último, debíamos sobreescribir OnBackKeyPress:

protected override void OnBackKeyPress(CancelEventArgs e)
{
        base.OnBackKeyPress(e);
}

En las Store Applications, podemos suscribirnos al evento BackPressed de la clase HardwareButtons. Tras hacerlo y realizar la lógica que requiera nuestra aplicación, ponemos el valor de e.Handled a true, consiguiendo evitar la navegación hacia atrás.

Las plantillas de Visual Studio para crear Store Applications con Windows Phone 8.1 contienen una clase llamada NavigationHelper. En general, esta clase nos facilita todo lo relacionado con la navegación en nuestras apps y es recomendable dejarla. Sin embargo, esta clase también se suscribe al evento BackPressed y sobreescribirá cualquier funcionalidad que añadamos en ese evento. Para controlar la navegación hacia atrás usando el NavigationHelper, debemos sobreescribir su GoBackCommand, que es de tipo RelayCommand. En el constructor de nuestra página ponemos lo siguiente:

this.navigationHelper.GoBackCommand = new RelayCommand(() => this.GoBack(), () => this.CanGoBack());

A continuación, implementamos el Action y el Func:

private bool CanGoBack()
{
    if (FolderListView.SelectionMode == ListViewSelectionMode.None)
    {
       return true;
    }
    else
    {
       return this.navigationHelper.CanGoBack();
    }
}

private void GoBack()
{
   if (FolderListView.SelectionMode == ListViewSelectionMode.Multiple)
   {
      FolderListView.SelectionMode = ListViewSelectionMode.None;
      FolderListView.IsItemClickEnabled = true;
   }
   else
   {
      this.navigationHelper.GoBack();
   }
}

En el caso de mi aplicación Esploristo, necesito que no se navegue atrás cuando la ListView esté en modo de selección, además de cambiarle el modo a None. Como veis, realizo las condiciones que me interesan, y en el caso de que sean falsas, dejo que el NavigationHelper se encargue con su implementación por defecto.

Controlar la navegación hacia atrás seguirá siendo importante y útil para nuestras apps aún con el nuevo modelo de programación de las Store Applications. De esta forma que os he explicado, os resultará sencillo hacerlo. Espero que os sea de ayuda.

Deja un comentario