TOC

This article has been localized into Italian by the community.

Data binding:

Utilizzare il DataContext

La proprietà DataContext è la sorgente di default del tuo bindings, salvo che non specifichi manualmente un'altra sorgente, come abbiamo fatto nel precedente capitolo con la proprietà ElementName. DataContext è definito dalla classe FrameworkElement, da cui la maggior parte dei controlli, incluso la finestra WPF eredita. In poche parole, ti consente di specificare una base per i tuoi binding.

Non c'è una sorgente di default per la proprietà DataContext (è semplicemente inizializzata a null nello start), ma siccome DataContext è ereditata attraverso la gerarchia dei controlli, tu puoi impostare un DataContext per la Window, e poi usarla in tutti i controlli figlio. Illustriamo questo con un semplice esempio:

<Window x:Class="WpfTutorialSamples.DataBinding.DataContextSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="DataContextSample" Height="130" Width="280">
	<StackPanel Margin="15">
		<WrapPanel>
			<TextBlock Text="Window title:  " />
			<TextBox Text="{Binding Title, UpdateSourceTrigger=PropertyChanged}" Width="150" />
		</WrapPanel>
		<WrapPanel Margin="0,10,0,0">
			<TextBlock Text="Window dimensions: " />
			<TextBox Text="{Binding Width}" Width="50" />
			<TextBlock Text=" x " />
			<TextBox Text="{Binding Height}" Width="50" />
		</WrapPanel>
	</StackPanel>
</Window>
using System;
using System.Windows;

namespace WpfTutorialSamples.DataBinding
{
	public partial class DataContextSample : Window
	{
		public DataContextSample()
		{
			InitializeComponent();
			this.DataContext = this;
		}
	}
}

Il codice in questo semplice esempio aggiunge solo una riga: dopo la chiamata standard InitializeComponent(), assegnato "this" come riferimento al DataContext. Praticamente diciamo semplicemente alla Window che noi vogliamo se stessa come data context.

Nello XAML, noi usiamo questo metodo per collegare alcune delle proprietà della Window: il titolo, la larghezza e l'altezza. Poichè la window ha un DataContext che è passato ai controlli figlio, non dobbiamo definire alcuna sorgente nelle binding - dobbiamo semplicemente usare il valore come se fosse globalmente disponibile.

Prova a lanciare l'esempio e a ridimensionare la window - noterai che le modifiche alle dimensioni si riflettono immediatamente nelle textbox. Puoi anche provare a scrivere un titolo differente nella textbox, ma sarai sorpreso dal vedere che questo non si riflette immediatamente. Dovrai spostare il focus su un altro controllo per vedere applicati i cambiamenti. Perchè? Beh, questo è il tema del prossimo capitolo.

Riepilogo

Usare la proprietà DataContext è come impostare la base di tutti i binding a cascata attraverso la gerarchia dei controlli. Questo ti permette di evitare il problema di definire manualmente una sorgente per ogni binding, e una volta che inizierai ad usare seriamente i data bindings, apprezzerai sicuramente il tempo e la digitazione risparmiata.

Tuttavia, questo non significa che devi utilizzare lo stesso DataContext per tutti i controlli di una Window. Dato che ogni controllo ha la sua proprietà DataContext, puoi facilmente interrompere la catena di ereditarietà e sovrascrivere il DataContext con un nuovo valore. Questo ti permette di eseguire operazioni come avere un DataContext globale sulla finestra e poi un DataContext più locale e specifico su, per esempio, un pannello contenente una form separata o qualcosa di simile.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!