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 :-)