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)); } } }