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 i command service nei test con .NET Aspire
Gestione delle issue type con GitHub
Personalizzare le pagine di errore su Azure App Service
Abilitare .NET 10 su Azure App Service e Azure Functions
Usare la libreria PredicateBuilder per eseguire query tramite Entity Framework che usano or su più campi
Interagire con Azure DevOps tramite MCP Server
Personalizzare i parametri del CSS Scroll Snap
Usare la parola chiave field per semplificare la scrittura di proprietà in C#
Ospitare n8n su Azure App Service
Evidenziare una porzione di testo in un pagina dopo una navigazione
Response streaming con Blazor e .NET 10
Gestire trasferimenti cloud con Azure Storage Mover


