Luca Regnicoli

Property Change Notification

All'interno della classe, definiamo il nostro metodo di notifica che conterrà la logica per scatenare l'evento; solitamente questa operazione viene effettuata all'interno degli accessor set delle proprietà.

  public class Valutazione : INotifyPropertyChanged
  {
    private string  auto = String.Empty;
    private decimal prezzo = 0;

    public Valutazione(string auto, decimal prezzo)
    {
      this.auto = auto;
      this.prezzo = prezzo;
    }

    public string Auto
    {
      get   {   return auto;    }
      set
      {
        if(auto.Equals(value) == false)
        {
          auto = value;
          OnPropertyChanged("Auto");
        }
      }
    }

    public decimal Prezzo
    {
      get   { return prezzo;  }
      set
      {
        if(prezzo.Equals(value) == false)
        {
          prezzo = value;
          OnPropertyChanged("Prezzo");
        }
      }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void OnPropertyChanged(string proprieta)
    {
      if (PropertyChanged !=null)
      {
        PropertyChanged(this, new PropertyChangedEventArgs(proprieta));
      }
    }
  }

Per completare l'esempio, aggiungiamo una collection che conterrà gli elementi e un timer per simulare un cambiamento di prezzo:

  public class Valutazioni : ArrayList
  {
    private Valutazione item1 = new Valutazione("Multipla",(decimal)2.95);
    private Valutazione item2 = new Valutazione("Fiesta",(decimal) 16.05);
    private Valutazione item3 = new Valutazione("A3", (decimal) 100.0);

    private void CreateTimer()
    {
      System.Timers.Timer timer = new System.Timers.Timer();
      timer.Enabled = true;
      timer.Interval = 2000;
      timer.Elapsed += new System.Timers.ElapsedEventHandler(Timer1_Elapsed);
    }

    private void Timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
      item1.Prezzo += (decimal) 1.25;
      item2.Prezzo += (decimal) 2.45;
      item3.Prezzo+= (decimal) 10.55;
    }

    public Valutazioni() : base()
    {
      Add(item1);
      Add(item2);
      Add(item3);
      CreateTimer();
    }
  }

Il codice (spero) è molto leggibile, nei prossimi post vedremo l'ultimo step, ovvero come collegare questa nostra collection a elementi XAML tramite ItemsSource, ItemTemplate e DataTemplate.

Lascio i feedback aperti, se 'sta roba vi fa dormire fatemelo sapere :-)