Windows 8, applicazioni Metro style, navigazione e MVVM

Print Content | More

Tranquilli, non ho tradito Windows Phone per Windows 8 Smile Windows Phone al momento si trova in una situazione un po’ di stallo: la versione 7.5 è ormai sul mercato da più di un anno, perciò diventa sempre più difficile trovare qualcosa di nuovo su cui bloggare a riguardo. Si tratta però di uno stallo temporaneo: nel corso dell’estate Microsoft rilascerà la prima beta del’SDK di Windows Phone 8, allora vedrete che i post su Windows Phone torneranno in gran numero Smile

In più, alla luce dei recenti annunci, imparare a conoscere WinRT è sicuramente un ottimo trampolino di lancio per preparsi al futuro.

Ma veniamo al dunque: oggi vi voglio parlare di un servizio che vi semplificherà la navigazione da una pagina all’altra nella vostra applicazione XAML / C# sviluppata utilizzando il pattern MVVM. Questo servizio arriva direttamente dalla mia esperienza di sviuppo per Windows Phone; una delle sfide da affrontare nell’utilizzo del pattern MVVM è che solitamente la navigazione verso un’altra pagina viene avviata da qualcosa che si è verificato in un ViewModel: il variare di una proprietà (ad esempio, l’elemento selezionato di una lista) o l’utilizzo di un comando (ad esempio, la pressione di un pulsante). Il problema è che il NavigationService è accessibile solo dal code behind, in quanto fa parte delle proprietà esposte dalla classe PhoneApplicationPage, dalla quale derivano tutte le pagine di Windows Phone.

Per risolvere questo inghippo ci sono diverse strategie: quella da me utilizzata sfrutta un’implementazione di un NavigationService illustrata in un post di Laurent Bugnion. Questo servizio non fa altro che da wrapper al NavigationService reale, offrendo la possibilità in un ViewModel di avviare una navigazione semplicemente inizializzando questo servizio all’interno dello stesso.

Veniamo ora all’applicazione Windows 8: il NavigationService di Windows Phone, così com’è, non è in grado di funzionare, dato che questi utilizza la proprietà Application.Current.RootVisual per accedere al frame principale dell’applicazione e, di conseguenza, gestire gli eventi di navigazione. Tale proprietà non è disponibile in WinRT: ecco perciò che è stato necessario trovare una soluzione alternativa.

La mia prima soluzione, funzionale ma non molto elegante, è stata quella di esporre come proprietà pubblica il rootFrame che viene inizializzato nel file App.xaml.cs: è tramite l’inizializzazione di questa classe che abbiamo la possibilità, nel code behind di una pagina, di avviare una navigazione tramite il metodo Frame.Navigate. In questo modo, l’implementazione del NavigationService era sostanzialmente la stessa di Windows Phone, con la differenza che utilizzavo la proprietà appena definita per accedere al frame e gestire gli eventi di navigazioneal posto di usare Application.Current.RootVisual, come nell’esempio:

 _mainFrame = (Application.Current as App).rootFrame;

 

Il mio amico Joost van Shaik, MVP anche lui nella categoria Windows Phone Development, partendo dal mio approccio è riuscito ad elaborare una soluzione molto più elegante: il costruttore del NavigationService accetta ora come parametro in fase di inizializzazione l’oggetto frame da utilizzare. Sfruttando poi il meccanismo della dependency injection siamo in grado, nell’App.xaml.cs, di registrare all’avvio il NavigationService opportunamente inizializzato con il rootFrame e di utilizzare questa istanza in tutti i nostri view models, mantenendo perciò sempre attivo il riferimento al frame.

Ecco il codice del NavigationService:

public class NavigationService : INavigationService
{
public NavigationService(Frame mainFrame)
{
  _mainFrame = mainFrame;
}

private Frame _mainFrame;

public event NavigatingCancelEventHandler Navigating;

public void NavigateTo(Type type)
{
    _mainFrame.Navigate(type);
}

public void NavigateTo(Type type, object parameter)
{
    _mainFrame.Navigate(type, parameter);
}

public void GoBack()
{
  if (_mainFrame.CanGoBack)
  {
    _mainFrame.GoBack();
  }
}

Rispetto al NavigationService di Windows Phone illustrato nel post di Laurent Bugnion le uniche differenze sono:

  • Il tipo di parametro passato al metodo NavigateTo, dato che il metodo Frame.Navigate di Windows 8 richiede il tipo della pagina verso cui ci vogliamo spostare, al contrario di quello di Windows Phone che accetta un URL.
  • La presenza di un overload del metodo NavigateTo, dato che Windows 8 supporta la possibilità di portare un oggetto da una pagina all’altra, al contrario di Windows Phone che supporta solo il passaggio di parametri tramite query string.

Ecco un esempio di come avviene questa inizializzazione utilizzando uno dei dependency injection container disponibile per WinRT, chiamato MetroIoc. La registrazione avviene all’interno del metodo OnLaunched del file App.xaml.cs, che viene invocato nel momento in cui l’applicazione viene avviata dalla tile principale o da una di quelle secondarie (se supportate).

protected override void OnLaunched(LaunchActivatedEventArgs args)
{
    var rootFrame = new Frame();
    // Do not repeat app initialization when already running, just ensure that
    // the window is active
    if (args.PreviousExecutionState == ApplicationExecutionState.Running)
    {
        Window.Current.Activate();
        return;
    }

    if (args.PreviousExecutionState == ApplicationExecutionState.Terminated || args.PreviousExecutionState==ApplicationExecutionState.NotRunning)
    {
        ioc.RegisterInstance(typeof (INavigationService), new NavigationService(rootFrame));
    }
    
    if (!rootFrame.Navigate(typeof(MainPage)))
    {
        throw new Exception("Failed to create initial page");
    }

    // Place the frame in the current Window and ensure that it is active
    Window.Current.Content = rootFrame;
    Window.Current.Activate();
}

A questo punto all’interno dei vostri view model, previa inizializzazione del NavigationService (tramite dependency injection oppure in maniera tradizionale) potete avviare la navigazione semplicemente chiamando il metodo NavigateTo, come nell’esempio:

public MainViewModel(INavigationService navigationService)
{
    navigationService.NavigateTo(typeof(DetailPage));
}

Happy coding!


Windows Phone , Windows 8 , Microsoft , WinRT

0 comments

Una nuova avventura (in inglese)

Print Content | More

Con il mio amico Ugo è almeno un anno che si parlava di aprire un blog in inglese. Le motivazioni erano tante: la voglia di “varcare” i confini nazionali, di migliorare la propria capacità di scrivere in inglese e la possibilità di poter aiutare non solo gli sviluppatori nazionali, ma anche quelli oltre confine.

Il tempo, però si sa, è tiranno e lavoro, famiglia e gli impegni community hanno sempre fatto posticipare questa decisione, anche solo per la mancanza di tempo nel mettere in piedi tutta l’infrastruttura necessaria per attivare il blog.

Qualche settimana fa Ugo è riuscito a superare tutti questi ostacoli e ha finalmente inaugurato il suo blog in inglese: grazie perciò al suo supporto sia “psicologico” (il suo impegno nel riuscire a concretizzare questo desiderio mi ha dato la spinta per vincere la pigrizia) che tecnico (si è occupato lui dell’installazione del blog engine e di tutti i plugin più utili) ho trovato finalmente l’opportunità di iniziare questa nuova avventura.

Apre perciò ufficialmente i battenti il mio blog in inglese all’indirizzo http://wp.qmatteoq.com: nuovo blog engine, nuova veste grafica e nuovi contenuti. Il blog non sarà infatti un mero “porting” con relativa traduzione del mio blog in italiano, ma cercherò di offrire contenuti specifici che possano essere utili anche per gli sviluppatori d’oltreoceano.

Non temete però: il blog in italiano non sarà abbandonato, anzi, continuerà a essere il “centro” delle mie attività community.

Un grazie a tutte le persone che incontro durante gli eventi, che mi contattano via mail e che mi aiutano a tenere sempre viva e forte la mia passione.


Windows 8 , Windows Phone

0 comments

Una nuova collaborazione con gli amici di DotNetLombardia

Print Content | More

Devo molto a DotNetLombardia: è grazie alla loro fiducia che ho avuto la possibilità di fare il mio esordio come speaker; è grazie a loro che ho potuto sperimentare cosa significa fare community; è grazie a loro che ho avuto la possibilità di dare il mio contributo nell’organizzazione di un evento; è grazie a loro che ho avute tante possibilità di condividere la mia passione con gli altri.

Grazie alla loro accoglienza ho trovato nuovi amici e sono entrato a far parte della famiglia Smile Per questo motivo, da questo momento troverete i contenuti del mio blog anche su DotNetLombardia, così da renderli fruibili anche ai membri e agli amici della community.

Troverete i miei post pubblicati perciò anche all’indirizzo http://dotnetlombardia.org/b/qmatteoq/default.aspx

Un grazie di cuore a Rob e a tutti gli altri per questa opportunità!


DotNetLombardia

1 comments

Il materiale dell’evento WP Refresh 2012 è online

Print Content | More

Giovedì scorso, nella sede di Microsoft Italia, si è svolto WP Refresh 2012, un evento community organizzato da DotNetLombardia completamente dedicato a Windows Phone. La giornata è andata veramente bene: le sessioni proposte sono state tutte interessanti, l’atmosfera era carica di interesse e voglia di partecipare, in più gli sponsor (Nokia e Microsoft) ci hanno aiutato moltissimo nel gestire alcuni aspetti logistici che avrebbero potuto causare problemi allo svolgimento della giornata.

Approfitto perciò di questo post per ringraziare tutti gli speaker (in particolare quelli che sono arrivati da lontano apposta per l’occasione), che hanno contribuito nel rendere la giornata così memorabile, e gli amici di DotNetLombardia, che mi hanno dato la possibilità di dare il mio contributo a questa community.

Come promesso al termine della giornata, pubblico in questo post slide e demo utilizzate durante l’evento per i miei due interventi: il keynote iniziale sul futuro di Windows Phone e la sessione tecnica su performance e localizzazione delle applicazioni. Le slide le trovate in fondo al post: sono pubblicate su SlideShare, quindi potete visualizzarle direttamente nella pagina oppure scaricarle con l’apposito link. Le demo invece sono disponibili su Skydrive.

Sul sito ufficiale di DotNetLombardia, invece, trovate raccolti i link per il download  del materiale di tutte le sessioni della giornata.


Windows Phone , Microsoft , DotNetLombardia

0 comments

Alcune novità dal mondo mobile: Windows Phone 7.5 Refresh e Windows Phone 8

Print Content | More

Questa settimana sono emerse alcune novità sul mondo Windows Phone, vediamole insieme.

Windows Phone 7.5 Refresh in distribuzione

La nuova versione di Windows Phone (denonimata 7.5 Refresh, o Tango per gli amici) è ufficialmente in distribuzione  su tutti i device di prima e seconda generazione. Come si sapeva già da tempo, si tratta di un aggiornamento minore, quindi le novità degne di nota sono veramente poche (come la possibilità di selezionare quali contatti presenti sulla SIM importare). La vera novità di Windows Phone 7.5 Refresh è infatti il supporto ai device di fascia bassa (come il Lumia 610): le ottimizzazioni effettuate dal team consentono di offrire un’esperienza d’uso del sistema operativo (a livello di velocità e prestazioni) equiparabile a quello dei telefoni di fascia alta, almeno per quanto riguarda l’utilizzo delle funzioni base e delle applicazioni native.

Discorso diverso per i possessori di Lumia 710 e Lumia 800: questo aggiornamento è particolarmente atteso in quanto Nokia ha rilasciato, in contemporanea, un update del firmware che introduce il supporto al tethering e al flip to silence (quando si riceve una telefonata è possibile semplicemente capovolgere il telefono per silenziare la suoneria).

Alcune informazioni sul marketplace di Windows Phone 8

Il team di Windows Phone ha rilasciato, sul suo blog ufficiale, alcune dichiarazioni riguardo il nuovo Marketplace che arriverà per Windows Phone 8: la prima, che farà la gioia di molti sviluppatori, è che il portale App Hub sarà completamente riscritto e la procedura di submit e di gestione delle nostre applicazioni rivista.

Il secondo annuncio è la lista completa di paesi in cui sarà disponibile il Marketplace: il numero è salito a 180, ovvero circa 3 volte il numero di paesi in cui è attualmente disponibile. Trovate l’elenco completo nel post ufficiale.

Il resto del post si limita a fare un riassunto di alcune delle novità presentate al Windows Phone Summit riguardanti la distribuzione delle applicazioni: il tanto atteso supporto all’in-app purchase (acquisti all’interno dell’applicazione le cui transazioni sono gestite direttamente da Microsoft); la possibilità per le aziende di introdurre il Company Hub, che fungono da accesso centralizzato a tutte le applicazioni aziendali; la possibilità per operatori e aziende di precaricare applicazioni sulla MicroSD, così da renderle già disponibili dopo la prima configurazione del telefono.


Windows Phone , Microsoft

2 comments

Goodbye Gaia, welcome Funambol

Print Content | More

Solitamente non mi piace parlare della mia sfera privata sul blog, preferisco far parlare la mia passione per lo sviluppo e per la condivisione, che credo possano essere sicuramente di maggiore interesse pubblico Smile

Il cambio di lavoro, però, riflette anche e soprattutto la sfera professionale, soprattutto quando passione e lavoro vanno di pari passo. Eccomi qui perciò a raccontarvi che due venerdì fa è stato il mio ultimo giorno lavorativo in Gaia, dove ho trascorso 5 anni e mezzo; è stato un periodo lungo e molto importante per la mia vita, sia professionalmente che nella vita privata: durante questi 5 anni mi sono sposato, ho conosciuto colleghi che si sono poi trasformati in amici importanti ed ho imparato molte cose, complice anche il fatto che Gaia è stata la mia prima esperienza lavorativa dopo la laurea.

Credo però che nella vita bisogna anche imparare ad accogliere il cambiamento, non adagiarsi sulle certezze che ci si è costruiti ma sapersi sfidare, accettare le novità e inseguire le proprie passioni: questi sono alcuni dei motivi che mi hanno portato ad accettare la proposta di Funambol, società di Pavia presso la quale ho iniziato la mia esperienza lunedì scorso. Di cosa si occupa? Funambol è una società specializzata in soluzioni cloud di sincronizzazione e condivisione dati, sia multimediali (foto, video, musica, ecc.) che personali (contatti, calendari, ecc.). Io sono entrato a far parte del team Windows, per seguire, insieme ad altre persone, lo sviluppo di prodotti per Windows Phone e Windows 8.

E ora si inizia una nuova esperienza, senza dimenticare il bagaglio di conoscenze e amicizie lasciato indietro, ma sempre con lo sguardo verso le sfide future che si presenteranno.

Se volete conoscere qualcosa di più di Funambol e del team di cui faccio parte, venite a WP Refresh 2012: ci troverete al completo!


Gaia , Funambol

1 comments

Aprire Internet Explorer da codice in un’applicazione Metro style

Print Content | More

Una delle applicazioni che ho sviluppato per Windows 8 è quella dedicata al mio blog, che permette di consultare i miei post più recenti sfruttando alcune delle feature di Windows 8 (sharing, notifiche, ecc.).

Una delle problematiche ho dovuto affrontare nello sviluppo è stata la gestione della modalità snapped: se per quanto riguarda la pagina principale non ho avuto difficoltà (è stato sufficiente convertire una GridView orizzontale in una ListView verticale), qualche problema è sorto quando si è trattato di gestire la pagina di dettaglio, costituita da una web view con il contenuto del post. La modalità snapped, infatti, lascia troppo poco spazio affinchè la web view sia usabile.

Durante il lab mi è stato dato un suggerimento molto intelligente: far si che, in modalità snapped, non venga visualizzata la pagina di dettaglio ma venga direttamente aperto Internet Explorer: in questo modo il browser va ad occupare lo spazio restante (in modalità Filled), rendendo il post leggibile.

Ma come fare? Il primo passo è stato determinare lo stato in cui si trova l’applicazione: la gestione della selezione dell’elemento nella lista deve essere differente a seconda se mi trovo in modalità Snapped (apertura del browser) o in una delle qualsiasi altre disponibili (navigazione alla pagina di dettaglio).

Per fare questo ci viene in aiuto la classe ApplicationView, facente parte del namespace Windows.UI.ViewManagement. Tale oggetto contiene la proprietà statica Value, che è di tipo ApplicationViewState: si tratta di un enumeratore che espone un valore per ognuno degli stati visivi disponibili (Snapped, Filled, FullScreenLandscape e FullScreenPortrait). Il valore di questa proprietà corrisponde allo stato visivo corrente dell’applicazione.

Il secondo passo è stato trovare il modo di avviare il browser direttamente sul post selezionato, un po’ come avviene su Windows Phone quando si utilizza il launcher WebBrowserTask. Anche in questo caso la documentazione MSDN è venuta in mio aiuto: il namespace Windows.System.Launcher contiene una classe statica chiamata Launcher, che espone il metodo asincrono LaunchUriAsync, che accetta come parametro un url di tipo Uri.

Ecco perciò un esempio di codice in cui ci sottoscriviamo all’evento SelectionChanged per ottenere il risultato desiderato:

private void Selector_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (ApplicationView.Value == ApplicationViewState.Snapped)
    {
        Launcher.LaunchUriAsync(new Uri(e.AddedItems[0]));
    }
    else
    {
        Frame.Navigate(typeof (DetailPage), e.AddedItems[0]);
    }
}


Windows 8 , Microsoft

0 comments

Windows Phone 8: tutte le novità su WinPhoneItalia

Print Content | More

Ieri è stato il grande giorno di Windows Phone: finalmente Microsoft, durante un evento organizzato ad hoc a San Francisco, ha svelato alcune delle novità che faranno parte della nuova versione di Windows Phone, chiamata ufficialmente Windows Phoone 8.

Anche se molto deve essere ancora svelato, le novità annunciate sono tante e meritano un approfondimento. Per tale motivo, vi invito a leggere il mio articolo pubblicato su WinPhoneItalia, sito dedicato a Windows Phone facente parte del network di ASPItalia.

Ecco il link: http://www.winphoneitalia.com/articoli/windows-phone/windows-phone-8-preview.aspx

Buona lettura!


Windows Phone , Microsoft

0 comments

There’s a new guy in town: Surface!

Print Content | More

No, non sto parlando dello schermo touch screen prodotto da Microsoft, ma di una novità ben più interessante e sostanziosa: con un evento organizzato ad hoc e mantenuto ben segreto fino alla fine, Microsoft la notte scorsa a presentato la sua nuova idea di tablet, Surface per l’appunto.

Ideologicamente, si tratta di una novità importantissima: dopo la parentesi XBox, Microsoft si butta nel campo dell’hardware con un nuovo prodotto dedicato al mercato consumer, che è indice di quanto Microsoft stia puntando su Windows 8, tanto da convincerla a scendere in campo in prima persona.

Tecnologicamente, si tratta di un prodotto molto affascinante, sia come form factor che come caratteristiche. Partiamo dal primo: Surface si presenta con un design semplice e molto solido (lo schermo è di 10.6 pollici), con però qualche accorgimento, che alza il livello della qualità del prodotto. La prima è un supporto integrato nello chassis stesso, che consente di appoggiare il tablet su un tavolo e tenerlo in piedi; la seconda novità, a mio avviso geniale, sono le Touch Cover e Type Cover, due cover magnetiche (disponibili in diversi colori), molto simili a quella dell’iPad 2, ma con un tocco di classe in più: non è solo una cover per proteggere il tablet, ma integra una tastiera da utilizzare quando si appoggia il tablet su una superficie. Le due tipologie si differenziano per il tipo di tastiera: la prima è basata sulla tecnologia touch ed è più sottile, la seconda è più spessa ma offre un feeling più simile a quello di una tastiera tradizionale.

Dal punto di vista delle caratteristiche tecniche, in realtà i modelli disponibili di Surface sono due: Surface for Windows RT nasce come tablet puro ed è dotato di Windows RT, ovvero la versione di Windows 8 specifica per i tablet ARM. Si tratta nè più nè meno di un (validissimo, a mio avviso) concorrente dei tablet attualmente sul mercato: vi ricordo infatti che Windows RT è la versione più “tablet” di Windows 8, in quanto non supporta la modalità desktop (se non per l’uso di Office e Internet Explorer) ma solo le applicazioni Metro style.

I punti di forza di questa versione saranno il prezzo (anche se ancora non sono stati diffusi), il peso ridotto (circa 600 grammi) e l’autonomia (garantita dall’uso di processori ARM): completano la dotazione uno storage SSD da 32 o 64 GB, una webcam e diverse porte di connessione (USB, memory card, HDMI).

Il secondo modello si chiama Surface for Windows Pro e più che un tablet è uno slate pc: dimensioni e form factor sono assolutamente identici, però al suo interno non troviano un ARM ma un i5 Intel, con uno storage da 64 a 128 GB (sempre con disco SSD). In questo caso, essendo un processore x86, troviamo installata la versione “full” di Windows 8, che rende questo modello di Surface un sostituto di un notebook o un ultrabook, grazie al supporto alla modalità desktop e quindi alla compatibilità con tutte le applicazioni “tradizionali” e non solamente con quelle Metro style.

Rispetto alla versione Windows RT questo modello avrà sicuramente un prezzo superiore e una autonomia più ridotta: anche il peso è maggiore (quasi 1 Kg). Ne guadagna però in flessibilità: grazie all'utilizzo di una versione "tradizionale" di Windows 8, questo modello può facilmente sostituire un portatile o un ultrabook. Si tratta sicuramente di un prodotto molto interessante per il mondo business, in quanto coniuga la versatilità di un computer tradizionale con il look & feel di un prodotto consumer, quindi piacevole da vedere e utilizzare.

Personalmente non vedo l’ora di poterci mettere le mani sopra: l’attesa non dovrebbe essere lunghissima, si parla di un rilascio della versione Windows RT più o meno in contemporanea con la RTM di Windows 8, mentre bisognerà aspettare 2 o 3 mesi in più per la versione Windows Pro.

Vi lascio con un approfondimento di Engadget, dove trovate foto, video e una prova su strada del prodotto.


Windows 8 , Microsoft , Surface

0 comments

Il futuro di Windows Phone svelato il 20 Giugno

Print Content | More

Microsoft ha ufficialmente annunciato e aperto le registrazioni per un nuovo evento dedicato a Windows Phone, chiamato Windows Phone Summit, che si terrà il 20 Giugno 2012 a San Franscisco alle ore 9 (che corrispondono alle ore 18 italiane): l’invito (che potete vedere nell’immagine) cita testualmente “A sneak peek of the future of Windows Phone”, ovvero “uno sguardo al futuro di Windows Phone”. E’ probabile perciò che, in questa data, scopriremo maggiori dettagli su quello che oggi viene chiamato Apollo, ovvero il nome in codice della prossima major release di Windows Phone (chiamata anche Windows Phone 8 dalla stampa e dai siti specializzati) e, forse, molte domande riguardanti la nuova piattaforma troveranno risposta (una su tutte, se i device attualmente in commercio saranno aggiornabili).

L’evento sarà trasmesso in streaming su Channel 9 all’indirizzo http://aka.ms/wpsummit: ovviamente, non mancherò di fare un riepilogo su questo blog nei giorni successivi.

Stay tuned!


Windows Phone , Microsoft

1 comments