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:
<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":
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.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.