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
Eseguire i worklow di GitHub su runner potenziati
Gestire il colore CSS con HWB
Sfruttare al massimo i topic space di Event Grid MQTT
Come migrare da una form non tipizzata a una form tipizzata in Angular
Le novità di Angular: i miglioramenti alla CLI
Usare il colore CSS per migliorare lo stile della pagina
Evitare il flickering dei componenti nel prerender di Blazor 8
Implementare l'infinite scroll con QuickGrid in Blazor Server
Utilizzare EF.Constant per evitare la parametrizzazione di query SQL
Miglioramenti nelle performance di Angular 16
Assegnare un valore di default a un parametro di una lambda in C#
Eseguire operazioni sui blob con Azure Storage Actions