ciao, in .net esiste gia un interfaccia che fa al caso tuo: INotifyPropertyChanged.
io te la ripropongo da zero cosi da farti vedere oltre che come usarla anche cosa effettivamente è (e come usare gli eventi in c#).
codice:
// Firma dell'evento il quale in realtà è una delegate che ritorna void e ha due argomenti in input
// un riferimento all'oggetto scatenante di tipo object e un "bagaglio" di informazioni da mettere a disposizione dei subscriber
// Il secondo oggetto è di tipo derivante da EventArgs.
public delegate void CustomNotifierEventHandler(object sender, CustomNotifierTypeEventArgs e);
// OPZIONALE. EventArgs specializzato per il nostro specifico evento.
// L'oggetto conterrà tutte le info da passare ai sottoscritti
// per esempio il nome della proprietà che è cambiata
public class CustomNotifierTypeEventArgs : EventArgs
{
public string NomeProprieta { get; set; }
}
// Interfaccia da implementare dalle classi che vogliono "notificare" i cambiamenti alle loro proprietà
public interface ICustomNotifierPropertyChanged
{
public event CustomNotifierEventHandler PropertyChanged;
}
// Classe di esempio.
// La proprietà Variabile1 notificherà tramite evento ogni volta che subirà cambiamenti
public class ClassManager : ICustomNotifierPropertyChanged
{
private int _variabile1;
public int Variabile1
{
get
{
return _variabile1;
}
set
{
if (_variabile1 != value)
{
_variabile1 = value;
OnPropertyChanged("Variabile1");
}
}
}
/// L'implementazione dell'interfaccia non è altro che la dichiarazione dell'evento
public event CustomNotifierEventHandler PropertyChanged;
public void OnPropertyChanged(string nomeProp)
{
// Salvare un evento in una var temporanea prima di usarlo è un pattern che ti mette
// PARZIALMENTE al sicuro da eventuali problemi di sincronizzazione.
var temp = PropertyChanged;
if (temp != null)
{
CustomNotifierTypeEventArgs e = new CustomNotifierTypeEventArgs { NomeProprieta = nomeProp };
temp(this, e);
}
}
}