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
Esecuzione condizionale dei task nelle pipeline YAML di Azure DevOps
Accedere da un App Service ad Azure SQL Database tramite AAD
A lap around Azure Cognitive Services
Hidden gems in Azure SQL that will make every developer want to use it!
Dimensionare dinamicamente una TextArea in Blazor
Introduzione a Blazor WebAssembly
Effettuare l'upload di un file da Blazor su Azure Blob Storage
Le novità di C# 9
Connettersi ad ASP.NET Core SignalR da Blazor WebAssembly
Utilizzare i controlled component per gestire una form con React
Modificare la modalità di esecuzione delle query con Include in Entity Framework Core 5
GRPC vs REST con .NET 5