Application Model di WPF
Un’applicazione WPF, in genere, è composta da più Pages XAML e i relativi files con il codice procedurale ma, oltre ai processi delle varie pagine, solitamente, vengono svolte operazioni di navigazione o passaggio di dati tra le varie pagine.
Il core di un’applicazione WPF è l’oggetto Application. Questo oggetto funge da interfaccia tra l’applicazione ed il sistema operativo e, inotre, permette di gestire la collection di pagine XAML.
Alcune caratteristiche dell’oggetto Application:
- È globale per applicazione. Tutte le pagine accedono allo stesso oggetto
- Viene creato durante lo startup dell’applicazione per tutta la durata dell’applicazione
<Application xmlns="<http://schemas.microsoft.com/winfx/2006/xaml/presentation>
xmlns:x="<http://schemas.microsoft.com/winfx/2006/xaml>
x:Class="SimpleNav.app"
StartupUri="Page1.xaml">
Nell’ esempio sopra, una definizione di applicazione standard che contiene:
- I primi tre attributi del tag <Application> sono quelli utilizzati in tutti i file XAML
- l’attributo StartupUri, indica il file XAML (in questo caso una Page) che deve essere caricato per primo
Quando viene compilata l’applicazione, il parser utilizza queste informazioni per creare l’oggetto Application dell’intera applicazione.
Naturalmente è possibile utilizzare il file del code-behind per aggiungere un livello logico all’applicazione a seconda degli scenari. In particolare è possibile:
- gestire eventi a livello di applicazione (come “Startup” o “Exit”)
- gestire eventi globali della navigazione tra Pages
- gestire custom property o metodi, con possibilità di utilizzo da qualsiasi pagina dell’applicazione
Per ottenere il riferimento dell’oggetto Application corrente:
dim App as Application = System.Windows.Application.Current
Tipicamente un’applicazione è composta da diverse pagine e nasce, quindi, l’esigenza di condividere informazioni tra di loro. L’oggetto Application mette a disposizione un metodo molto comodo per questa operazione:
app.Current.Properties("TextFromPage1") = txtBox.Text
È possible, infatti, memorizzare qualsiasi tipo di oggetto nella collection Properties.