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
Bloccare l'esecuzione di un pod in mancanza di un'artifact attestation di GitHub
Utilizzare l'espressione if inline in una pipeline di Azure DevOps
Ottimizzare le performance delle collection con le classi FrozenSet e FrozenDictionary
Migliorare i tempi di risposta di GPT tramite lo streaming endpoint in ASP.NET Core
Creare agenti facilmente con Azure AI Agent Service
Popolare una classe a partire dal testo, con Semantic Kernel e ASP.NET Core Web API
Creare un webhook in Azure DevOps
Generare un hash con SHA-3 in .NET
Gestire la cancellazione di una richiesta in streaming da Blazor
Gestione degli eventi nei Web component HTML
Generare la software bill of material (SBOM) in GitHub