Utilizzare il code behind di un UserControl come DataContext in Silverlight 3.0

In Silverlight l'engine di data binding è una caratteristica molto flessibile, con la quale è possibile rendere dinamiche alcune parti dell'interfaccia, sia in funzione di dati che di input gestiti dall'utente.

In uno UserControl, ad esempio, per sfruttare al meglio l'engine è necessario che siano utilizzate in binding le proprietà di un oggetto impostato come DataContext del controllo stesso, oggetto che implementi l'interfaccia INotifyPropertyChanged.

Grazie alla direttiva Self di RelativeSource, in Silverlight 3 possiamo utilizzare il data binding per impostare come DataContext il code behind dello UserControl stesso, in modo che possano essere utilizzate in binding le proprietà definite direttamente nella sua classe:

XAML
 
<UserControl x:Class="_76.MainPage" 
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
             DataContext="{Binding RelativeSource={RelativeSource Self}}">

Di seguito un esempio in cui la classe di code behind espone una proprietà di nome "Testo":

C#
 
public partial class MainPage : UserControl, INotifyPropertyChanged 
{ 
    public MainPage() 
    { 
        InitializeComponent(); 
    } 
 
    private string _testo; 
    public string Testo 
    { 
        get { return _testo; } 
        set 
        { 
            _testo = value; 
            OnPropertyChanged("Testo"); 
        } 
    } 
 
    public event PropertyChangedEventHandler PropertyChanged; 
    protected void OnPropertyChanged(string propertyName) 
    { 
        PropertyChangedEventHandler propertyChanged = this.PropertyChanged; 
        if (propertyChanged != null) 
            propertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
    } 
}

Con tale esempio, ogni controllo dello UserControl che utilizzerà la proprietà "Testo" sarà automaticamente aggiornato del cambiamento del suo valore.

IL CONTENUTO
IN PRIMO PIANO
MEDIA
IN EVIDENZA
MISC