L'interfaccia INotifyPropertyChanged è molto comune nei client Windows basati sul binding che devono reagire al cambio del valore di una proprietà. Ad esempio, quando si vuole disabilitare un'area a seguito dello stato di un checkbox, si collega la checkbox a un valore booleano e l'abilitazione dell'area al booleano stesso così quando cambia lo stato del booleano la UI si allinea.
Per fare questo si fa implementare alla classe che contiene il booleano l'interfaccia INotifyPropertyChanged e nel setter della proprietà si scatena un evento che notifica dei cambi così che l'interfaccia può ridisegnarsi.
Prima dell'avvento di C# 6 il codice da scrivere nel setter della proprietà era il seguente.
private bool _enabled; public string Enabled { get { return _enabled; } set { _enabled = value; var handler = PropertyChanged; if (handler != null) { handler(this, new PropertyChangedEventArgs("Enabled")); } } }
Adesso invece grazie a nameof e il null-conditional operator possiamo riscrivere lo stesso codice nel seguente modo.
private bool _enabled; public string Enabled { get { return _enabled; } set { _enabled = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Enabled))); } }
Se compariamo il codice nel setter della proprietà, il primo esempio ci costringe a scrivere molto codice e anche non tipizzato (la proprietà Enabled viene passata come stringa al costruttore di PropertyChangedEventArgs), mentre il secondo è molto più compatto e tipizzato.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare QuickGrid di Blazor con Entity Framework
Sfruttare MQTT in cloud e in edge con Azure Event Grid
Creazione di plugin per Tailwind CSS: espandere le Funzionalità del Framework
Ordinare randomicamente una lista in C#
Utilizzare i primary constructor di C# per inizializzare le proprietà
Sfruttare GPT-4o realtime su Azure Open AI per conversazioni vocali
Effettuare il log delle chiamate a function di GPT in ASP.NET Web API
Creare una libreria CSS universale: Clip-path
Path addizionali per gli asset in ASP.NET Core MVC
Generare velocemente pagine CRUD in Blazor con QuickGrid
Miglioramenti nell'accessibilità con Angular CDK
Ottimizzare la latenza in Blazor 8 tramite InteractiveAuto render mode