Ogni Content, Text e Panel Control espone la proprietà DataContext, che permette di contenere la fonte dati e stabilire se sia visibile oppure no.
Riprendiamo il frammento di codice XAML della scorsa lezione:
<StackPanel x:Name="LayoutRoot">
<TextBlock Text="{Binding Name}" />
<Button Content="{Binding CurrentDriver}" />
</StackPanel>
Quando un controllo figlio, come in questo caso, non ha impostato un DataContext, lo eredita dal padre. Ecco perché nell'esempio impostiamo il DataContext dello StackPanel.
LayoutRoot.DataContext = Team.GetAll().First();
Eseguiamo l'applicazione ed il risultato sarà simile al seguente:
Se vogliamo visualizzare una collezione di elementi dobbiamo utilizzare un ItemsControl, per esempio possiamo visualizzare la lista dei Team in un controllo ListBox. Per farlo dobbiamo impostare la proprietà ItemSource esposta da tutti gli ItemsControl. In fase di rendering il comportamento predefinito prevede che se non viene definito come visualizzare un oggetto contenuto nella lista verrà utilizzato il valore restituito dal metodo ToString. Diversamente possiamo indicare quale proprietà visualizzare tramite la proprietà DisplayMemberPath.
<StackPanel x:Name="LayoutRoot">
<ListBox Margin="10"
ItemsSource="{Binding}"
DisplayMemberPath="Name" />
</StackPanel>
In questo caso utilizziamo il Markup Extension senza parametri, per indicare al motore di Binding che siamo interessati a tutta la fonte dati, ovvero il DataContext. Dopodiché modifichiamo anche il code-behind in modo che carichi l'intera lista di Team.
private List<Team> teams;
public Page()
{
InitializeComponent();
teams = Team.GetAll();
LayoutRoot.DataContext = teams;
}
Il risultato sarà il seguente:
Se vuoi aggiornamenti su .NET inserisci la tua email nel box qui sotto: