Il Binding è quella funzionalità di WPF che permette di caricare qualsiasi proprietà da una classe in base ad un data source, al contesto di dati o ad un altro elemento. Oltre a mostrare questi valori il motore di Binding è in grado sia di cambiare le proprietà a cui è legato, sia di monitorarle in modo da ripopolare il controllo a cui esso è associato. Per farlo, il motore controlla se la sorgente dati implementa la classe INotifyPropertyChanged del namespace System.ComponentModel e si aggancia all'evento PropertyChanged per ricevere le notifiche di cambiamento delle proprietà. Questa interfaccia è indipendente da WPF ed è già possibile sfruttarla nelle WinForms, perciò è utile se si vuole dare alla propria entità la possibilità di funzionare al meglio anche con WPF.
E' possibile quindi scrivere una classe base che implementi tale interfaccia e fornire dei metodi d'appoggio oltre al pattern event normalmente usato in .NET:
public abstract class NotifyEntity : DispatcherObject, INotifyPropertyChanged
{
private PropertyChangedEventHandler _propertyChanged;
event PropertyChangedEventHandler INotifyPropertyChanged.PropertyChanged
{
add { _propertyChanged += value; }
remove { _propertyChanged -= value; }
}
protected virtual void OnPropertyChanged(string propertyName)
{
this.OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
}
protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)
{
if (_propertyChanged != null)
this._propertyChanged(this, e);
}
}
La classe NotifyEntity può essere poi eredita dalle proprie entità per richiamare l'evento al variare delle proprietà. Ecco un esempio:
public class MyEntity : NotifyEntity
{
private string _property1;
public string Property1
{
get { return _property1; }
set
{
// Controllo se la proprietà è cambiata
if (_property1 != value)
{
_property1 = value;
// Scateno l'evento
OnPropertyChanged("Property1");
}
}
}
}
Per finire poi, nel markup XAML l'uso della proprietà, supponendo di trovarsi già nel contesto di MyEntity è molto banale:
<TextBlock Text="{Binding Property1}" />
- Il CLR in un processo è come Highlander: ce ne può essere soltanto uno
- Accesso ai dati in Silverlight 2.0
- #71 - Caricare un'associazione in deferred loading con Entity Framework
- #75 - Gestire gli errori di concorrenza in Entity Framework
- Entity Framework e stranezze(*)
- #22 - Multithreading in Silverlight 2.0: operazioni asincrone in background
- Future Web Conference e .NET 3.5
- Real Code Birthday: 10 anni!
- LINQ to reflection - Parte due
- ADO.NET Data Services Silverlight 2 Beta2 Client library Refresh
- Stiamo per tornare!
- Routing e dynamic data control di ASP.NET 3.5 SP1
Esprimi il tuo giudizio su questo script:
Per procedere devi essere autenticato.
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.





Stampa
Download 


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!