Universal App – Sviluppo di
App per Windows Store
Gianluca Bertelli
[email protected]
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)
Windows
Shared
Phone
UI
Struttura di un App (Universal)
XAML
HTML
Grafica componibile
Windows
Phone
Griglia
Griglia
Pannello
orrizontale
Controllo
custom
Pannello
verticale
Barra di
stato
Pulsante
Data
Shared
Controllo
custom
Barra di
stato
Pulsante
PROJECT DEMO
DataBinding
Persona
Nome
Textbox1
Cognome
Textbox2
Età
Textbox3
DataContext
• Connessione «Automatica» tra UI e business logic
• Nasconde ed evita l’implementazione di meccanismi di refresh
INotifyPropertyChanged
Prima
public string Name {
get;
set;
}
Dopo
private string name;
public string Name
{
get { return name; }
set
{
name = value;
NotifyOfPropertyChange(() => Name);
}
}
XAML
<TextBlock Text="{Binding Path=Name}" DataContext="{Binding Persona}" />
DATABINDING DEMO
Model View ViewModel (MVVM)
MVC?
Model View ViewModel (MVVM)
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
<Button Content="Pin to start" Command="{Binding Path=PinToStart}" />
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 Bertelli
[email protected]
@bertelli
Scarica

Universal_App_Sviluppo_App_Windows_Store