Utilizzare nameof e null-conditional operator in C# per semplificare l'implementazione di INotifyPropertyChanged

di Stefano Mostarda, in .NET Framework, C#6,

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

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi