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
Ottimizzazione dei block template in Angular 17
Eseguire una GroupBy per entity in Entity Framework
Gestire domini wildcard in Azure Container Apps
Creare gruppi di client per Event Grid MQTT
Personalizzare l'errore del rate limiting middleware in ASP.NET Core
Come migrare da una form non tipizzata a una form tipizzata in Angular
Estrarre dati randomici da una lista di oggetti in C#
Sfruttare lo stream rendering per le pagine statiche di Blazor 8
Potenziare Azure AI Search con la ricerca vettoriale
Eseguire query manipolando le liste contenute in un oggetto mappato verso una colonna JSON
Code scanning e advanced security con Azure DevOps
Reactive form tipizzati con modellazione del FormBuilder in Angular
I più letti di oggi
- Gli oggetti CallOut di Expression Blend 4.0
- Configurazione tramite environment variable in ASP.NET Core
- Controllare gli accessi IP alle app con Azure Container Apps
- Creare applicazioni web native con Electron
- Utilizzare le sequence di SQL Server in Entity Framework Core
- Update NoDo di marzo 2011 di Windows Phone in fase di distribuzione
- Tile, notifiche e background task in Windows Phone 8
- Mantenere l'ordine dei dati in una query PLINQ