using System.Collections.Generic;
using System.ComponentModel;
namespace Developpez.Dotnet.Windows.ViewModel
{
///
/// Fournit une implémentation de base de l'interface INotifyPropertyChanged pour
/// des objets supportant le binding.
///
public abstract class ObservableBase : INotifyPropertyChanged
{
///
/// Se produit quand la valeur d'une propriété de cet objet est modifiée
///
public event PropertyChangedEventHandler PropertyChanged;
///
/// Raccourci pour vérifier si la valeur d'une propriété est modifiée,
/// affecter la nouvelle valeur au champ, et déclencher si besoin l'évènement
/// PropertyChanged.
///
/// Type de la propriété
/// Champ qui stocke la valeur de la propriété
/// Nouvelle valeur affectée à la propriété
/// Nom de la propriété
/// true si la valeur du champ a été modifiée, false si la valeur fournie était égale à celle du champ
protected bool SetProperty(ref T backingField, T newValue, string propertyName)
{
if (!EqualityComparer.Default.Equals(backingField, newValue))
{
backingField = newValue;
OnPropertyChanged(propertyName);
return true;
}
return false;
}
///
/// Déclenche l'évènement PropertyChanged sur cet objet.
///
/// La propriété dont la valeur a changé
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = this.PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}