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}" />
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
I più letti di oggi
- Effettuare il log delle chiamate a function di GPT in ASP.NET Web API
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
- Creare una libreria CSS universale: Cards
- Eseguire script pre e post esecuzione di un workflow di GitHub