28
Matteo Pagani Microsoft MVP | Nokia Developer Champion Software Engineer @ Funambol Mail: [email protected] Twitter: @qmatteoq Blog: www.qmatteoq.com [IT] – wp.qmatteoq.com [EN] MVVM e Caliburn Micro

MVVM e Caliburn Micro for Windows Phone applications

Embed Size (px)

DESCRIPTION

The MVVM pattern applied to a Windows Phone application and how to implement it using the Caliburn Micro framework

Citation preview

Page 1: MVVM e Caliburn Micro for Windows Phone applications

Matteo PaganiMicrosoft MVP | Nokia Developer ChampionSoftware Engineer @ Funambol

Mail: [email protected]: @qmatteoqBlog: www.qmatteoq.com [IT] – wp.qmatteoq.com [EN]

MVVM e Caliburn Micro

Page 2: MVVM e Caliburn Micro for Windows Phone applications

Il pattern MVVM

Toolkit vs framework

Caliburn Micro

Agenda

Page 3: MVVM e Caliburn Micro for Windows Phone applications

Il pattern MVVM

Page 4: MVVM e Caliburn Micro for Windows Phone applications

Il code behind• Nell’approccio tradizionale, la logica viene

scritta nel code behind, insieme al codice per gestire le interazioni con l’interfaccia grafica

• E’ difficile separare i due contesti e identificare i problemi

• E’ difficile scrivere test, perché richiederebbe la simulazione delle interazioni con l’interfaccia grafica

• E’ difficile per un designer lavorare sulla grafica senza conoscere i dettagli implementativi

Page 5: MVVM e Caliburn Micro for Windows Phone applications

Model-View-ViewModel• E’ un pattern specifico per il mondo XAML• Aiuta a separare logica e interfaccia utente,

aiutando a mantenere leggibilità, testabilità, manutenibilità e «blendability»

• Sfrutta le caratteristiche principali del linguaggio, come DataContext e binding

Page 6: MVVM e Caliburn Micro for Windows Phone applications

ModelServizi e entitàRecuperano i dati necessari all’applicazione in maniera “grezza”, senza avere dipendenze dalle modalità di presentazione

Alcuni esempi• La definizione delle entità base• Interazione con un database• Interazione con un servizio REST o WCF• Download di file dalla rete

Page 7: MVVM e Caliburn Micro for Windows Phone applications

ViewL’interfaccia grafica dell’applicazioneContiene tutti i controlli, le animazioni e gli effetti visuali che definiscono la UI dell’applicazione.

XAMLIl linguaggio di riferimento per le tecnologie Windows 8 e Windows Phone è lo XAML.

Code behindNon deve contenere logica, ma al massimo codice necessario per gestire elementi dell’interfaccia (ad esempio, animazioni).

Page 8: MVVM e Caliburn Micro for Windows Phone applications

View ModelE’ il punto di contatto tra View e ModelSi occupa di prendere i dati grezzi esposti dal Model e di elaborarli per essere presentati dalla View.

BindingConsente di creare un canale bidirezionale di comunicazione tra oggetti definiti nel codice e controlli presenti nello XAML.

DataContextIl ViewModel viene assegnato come DataContext della pagina: di conseguenza, tutti i controlli possono accedere alle proprietà del ViewModel

Page 9: MVVM e Caliburn Micro for Windows Phone applications

Model-View-ViewModel

Vie

w

Vie

wM

odel

Model

UI events

Model change events

Property

changed

events

ViewModel data

Update

Read

Page 10: MVVM e Caliburn Micro for Windows Phone applications

INotifyPropertyChanged• E’ l’interfaccia che deve essere implementata

da qualsiasi classe che interagisce con la View• Consente di propagare le modifiche fatte alle

proprietà di un oggetto ai controlli nella View collegati

• ObservableCollection<T> è un tipo particolare di collezione che implementa INotifyPropertyChanged

Page 11: MVVM e Caliburn Micro for Windows Phone applications

INotifyPropertyChangedCodeprivate string name;public string Name{ get { return name; } set { name = value; NotifyOfPropertyChange(() => Name); }}

XAML<TextBlock Text="{Binding Path=Name}" />

Page 12: MVVM e Caliburn Micro for Windows Phone applications

Command• I command sono funzioni che possono essere

associate alle azioni, grazie alla proprietà Command

• A differenza degli event handler, possono essere associati ad un controllo tramite binding

• Supportano la gestione dello stato del comando (abilitato o disabilitato), che si riflette in automatico sullo stato del controllo

Page 13: MVVM e Caliburn Micro for Windows Phone applications

Codeprivate ICommand _pinToStart;public ICommand PinToStart{ get { return _pinToStart ?? (_pinToStart = new RelayCommand( () => taskService.PinToStart(CurrentItem), () => canPin)); }}XAML<Button Content="Pin to start" Command="{Binding Path=PinToStart}" />

Command

Page 14: MVVM e Caliburn Micro for Windows Phone applications

Toolkit vs framework

Page 15: MVVM e Caliburn Micro for Windows Phone applications

Toolkit vs framework• MVVM è un pattern, di conseguenza le librerie

disponibili non rappresentano MVVM, ma aiutano a implementare MVVM

• I toolkit offrono gli strumenti base per implementare il pattern, indipendentemente dalla piattaforma

• I framework offrono strumenti per gestire con il pattern MVVM i casi d’uso più comuni della piattaforma

Page 16: MVVM e Caliburn Micro for Windows Phone applications

MVVM Light• Toolkit di Laurent Bugnion (

http://mvvmlight.codeplex.com/)• Compatibile con tutte le tecnologie XAML / C#• Feature:• Classe base per i ViewModel con supporto a INotifyPropertyChanged• Classe base per implementare i Command• Messenger per scambiare messaggi tra i ViewModel

Page 17: MVVM e Caliburn Micro for Windows Phone applications

Caliburn Micro• Framework ideato da Rob Eisenberg (http://

caliburnmicro.codeplex.com)• Compatibile con tutte le tecnologie XAML / C#• Feature specifiche per Windows Phone:• Supporto alla navigazione e al ciclo di vita delle pagine• Supporto al tombstoning • Supporto ai launcher & chooser• Supporto alle collezioni• Sistema di dependency injection integrato

Page 18: MVVM e Caliburn Micro for Windows Phone applications

Naming convention• Supporta le naming convention: non è

necessario effettuare il binding manualmente, è sufficiente seguire alcune convenzioni sui nomi delle proprietà o dei metodi

• Esempi:• MainView -> MainViewModel per avere il binding tra View e

ViewModel• x:Name di un controllo = nome di una proprietà nel ViewModel per

il binding• x:Name di un controllo = nome di un metodo nel ViewModel per i

command

• E’ supportato comunque l’approccio tradizionale

Page 19: MVVM e Caliburn Micro for Windows Phone applications

Il primo progettoDemo

Page 20: MVVM e Caliburn Micro for Windows Phone applications

Alcune chicche

Page 21: MVVM e Caliburn Micro for Windows Phone applications

Ciclo di vita della pagina• E’ sufficiente ereditare il ViewModel dalla

classe Screen per avere accesso agli eventi:• OnInitialize(), quando la pagina viene inizializzata la prima volta• OnActivate(), quando la pagina viene visualizzata (OnNavigatedTo)• OnDeactivate(), quando l’utente lascia la pagina corrente

(OnNavigatedFrom)

• Approccio ViewModel first con supporto ai parametrinavigationService.UriFor<DetailPageViewModel>().WithParam(x => x.SelectedId, 5).Navigate();

Page 22: MVVM e Caliburn Micro for Windows Phone applications

Ciclo di vitaDemo

Page 23: MVVM e Caliburn Micro for Windows Phone applications

Tombstoning• Si crea una classe che eredita da

StorageHandler<T>, dove T è la tipologia di ViewModel

• Si implementa il metodo Configure(), specificando quale proprietà del ViewModel si vuole mantenere in caso di sospensione e dove (storage temporaneo o storage persistente).

Page 24: MVVM e Caliburn Micro for Windows Phone applications

TombstoningDemo

Page 25: MVVM e Caliburn Micro for Windows Phone applications

Azioni• Tramite la naming convention è possibile

associare un metodo all’evento di default di un controllo (ad esempio, Tap per i Button)

• Sintassi speciale per collegare un metodo a qualsiasi evento

<Button micro:Message.Attach="[Event DoubleTap] = [Action ShowMessage]" />

Page 26: MVVM e Caliburn Micro for Windows Phone applications

AzioniDemo

Page 27: MVVM e Caliburn Micro for Windows Phone applications

Per approfondire• Tutorial in inglese: http://

s.qmatteoq.com/CaliburnTutorial• Tutorial in italiano: http://

s.qmatteoq.com/CaliburnTutorialIT• Sito ufficiale con la documentazione:

http://caliburnmicro.codeplex.com

Page 28: MVVM e Caliburn Micro for Windows Phone applications

Matteo Pagani

http://www.qmatteoq.com [IT]

http://wp.qmatteoq.com [EN]

[email protected]

Twitter: @qmatteoq

Grazie!