Universal App – Sviluppo di App per Windows Store Gianluca Bertelli
Agenda Piattaforme Struttura di un App Grafica Componibile DataBinding Model View ViewModel (MVVM) Alcuni Suggerimenti Q&A
Piattaforme
Piattaforme (Chi ben comincia...) Windows Phone 7.8 Windows Phone 8 Windows Phone 8.1 Windows Store Universal
Piattaforme (è...) Windows Store App 8.1 Windows Store Universal
Piattaforme (..a metà dell’opera!) Windows Store Universal Windows App (Windows 10)
Struttura di un App (Universal) Phone Windows Shared
Struttura di un App (Universal) UI XAML HTML
Grafica componibile Griglia Pannello orrizontale Controllo custom Pulsante Barra di stato Data Windows Phone Shared
PROJECT DEMO
DataBinding Connessione «Automatica» tra UI e business logic Nasconde ed evita l’implementazione di meccanismi di refresh Textbox1 Textbox2 Textbox3 Persona DataContext
INotifyPropertyChanged Prima public string Name { get; set; } Dopo private string name; public string Name { get { return name; } set { name = value; NotifyOfPropertyChange(() => Name); } XAML
DATABINDING DEMO
Model View ViewModel (MVVM) MVC?
Model View ViewModel (MVVM)
Sfrutta il meccanismo del Binding Pacchetti NuGet gratuiti di diversi autori Permette di «minimizzare» l’utilizzo del «code behind» Massimizza il riutilizzo e la «testabilità» della parte di modello E’ possibile riutilizzare lo stesso ViewModel su grafiche differenti
Command – no more OnButtonClick! Gli eventi nell’approccio tradizionale vengono gestiti tramite event handler definiti nel code behind (OnButtonClick...) Abilitare o meno un pulsante richiede di gestirne lo stato in vari punti dell’applicazione, o avere un metodo di «refresh UI» Vorrei gestire il «ButtonClick» nel modello e non nella grafica Vorrei che il pulsante si abiliti/disabiliti in automatico in base allo stato corrente Command
Command – no more OnButtonClick! E’ una propietà dei controlli Sfrutta il Binding Code private ICommand _pinToStart; public ICommand PinToStart { get { return _pinToStart ?? (_pinToStart = new RelayCommand( () => taskService.PinToStart(CurrentItem), () => canPin)); } XAML
MVVM DEMO
Alcuni suggerimenti Scrivete le classi di Modello in Portable Class Library (PCL) Separazione «netta» tra Modello e «Data Access Layer» Un minimo di Unit Testing Implementate il workflow/macchina a stati già nel modello Scrivetevi Componenti custom Massimizzare l’utilizzo del progetto Shared Stili Immagini file Design Data Utilizzate un progetto Universal come base di partenza
Q & A Gianluca