In un mio precedente post abbiamo visto come cambiare la pagina di startup di un progetto Windows Phone per poter decidere all’avvio della applicazione quale pagina aprire.
Nel mio caso era per visualizzare una pagina di mancata disponibilità della rete dati, ma le applicazioni possono essere molteplici.
Per la nuova versione della mia app (pensata espressamente per WP8) ho deciso di usare il framework Caliburn.Micro ispirato dai post del bravo e disponibilissimo Matteo.
Salto tutti i dettagli del setup di una app che utilizza Calibrun, perchè nel link qui sopra potete trovare tutte le informazioni necessarie.
La soluzione si è perfino semplificata:
- Nel bootstrapper dell’applicazione facciamo l’override della funzione CreatePhoneApplicationFrame
protected override PhoneApplicationFrame CreatePhoneApplicationFrame()
{
var frame = new PhoneApplicationFrame { UriMapper = new AssociationUriMapper() };
return frame;
}
- Definiamo ora la classe AssociationUriMapper che deriva la classe base UriMapperBase
public class AssociationUriMapper : UriMapperBase
{
public override Uri MapUri(Uri uri)
{
if (uri.OriginalString.Contains("AboutPageView"))
return uri;
return !PhoneUtilities.HasInternetConection ? new Uri("/Views/NoConnectionPageView.xaml", UriKind.Relative) : uri;
}
}
Questa classe semplicemente ritorna l’uri a seconda di alcune condizioni (nel mio caso la presenza o assenza di rete). Per qualche View è possibile saltare il controllo (ad esempio la pagina di about non necessitò di connettività)
Questa implementazione ha anche il vantaggio di funzionare per l’intera app (qualsiasi navigazione passa per il nostro UriMapper), per cui abbiamo centralizzato una gestione che prima era necessario applicare in ogni pagina.