Utilizzare il code behind di un UserControl come DataContext in Silverlight 3.0
di Alessio Leoncini, in Silverlight 3.0, l'11 marzo alle 08:00
Archiviato in: Expression Blend, Microsoft Expression, Silverlight, Silverlight - animazioni, Silverlight 3.0, Silverlight 3.0 Guida Completa
Commenti
mi piace (0)
non mi piace (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.





