Il Data Binding è quel meccanismo che consente di associare e sincronizzare una fonte dati agli elementi dell'interfaccia utente. In fase di design, grazie a XAML, possiamo descrivere in maniera dichiarativa le relazioni di Binding senza preoccuparci di collegare la fonte dati.
Chiariamo questi concetti con un esempio: supponiamo di avere il seguente oggetto da visualizzare.
public class Team
{
public string Name{ get; set; }
public string CurrentDriver { get; set; }
public static List<Team> GetAll()
{
return new List<Team>
{
new Team { Name = "Citroen Total World Rally Team",
CurrentDriver = "Sebastian Loeb" },
new Team { Name = "BP Ford Abu Dhabi World Rally Team",
CurrentDriver = "Mikko Hirvonen" }
};
}
}
La classe oltre alle semplici proprietà contiene un metodo statico che restituisce un insieme di istanze predefinite di Team. Per collegare la fonte dati con le proprietà dei controlli utilizziamo il Markup Extension Binding, al quale possiamo passare una serie di parametri come il nome della proprietà da collegare e una modalità di Binding, tra quelle descritte nella seguente tabella:
| Modalità | Descrizione |
|---|---|
| OneWay | La sincronizzazione dei dati si propaga solo dalla sorgente verso l'interfaccia utente |
| OneTime | La sincronizzazione dei dati si propaga solo dalla sorgente verso l'interfaccia utente e solo la prima volta |
| TwoWay | La sincronizzazione dei dati si propaga in entrambe le direzioni |
Procediamo dichiarando in XAML una serie di controlli collegati alle proprietà di un singolo oggetto Team.
<StackPanel x:Name="LayoutRoot">
<TextBlock Text="{Binding Name}" />
<Button Content="{Binding CurrentDriver}" />
</StackPanel>
La definizione dell'interfaccia non ha richiesto nessun tipo di collegamento con i dati. L'unico limite nell'attuale architettura di Binding di Silverlight da tenere di conto è che la destinazione deve essere una DependencyProperty.
Prima di eseguire l'applicazione dobbiamo dare "in pasto" al motore di Binding un'istanza della classe Team. Per farlo dobbiamo impostare, nel code-behind, tale istanza come valore della proprietà DataContext del controllo StackPanel.
public Page()
{
InitializeComponent();
LayoutRoot.DataContext = Team.GetAll().First();
}
Se vuoi aggiornamenti su .NET inserisci la tua email nel box qui sotto: