using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Linq.Expressions; using System.ComponentModel; namespace Developpez.Dotnet { /// /// Fournit des méthodes d'extension pour faciliter l'utilisation des évènements /// public static class EventExtensions { /// /// Déclenche un évènement en vérifiant si des handlers y sont abonnés /// /// L'évènement à déclencher /// L'objet à l'origine de l'évènement public static void Raise(this EventHandler pEvent, object sender) { if (pEvent != null) pEvent(sender, EventArgs.Empty); } /// /// Déclenche un évènement en vérifiant si des handlers y sont abonnés /// /// Type des paramètres de l'évènement /// L'évènement à déclencher /// L'objet à l'origine de l'évènement /// Les paramètres de l'évènement public static void Raise(this EventHandler pEvent, object sender, TEventArgs e) where TEventArgs : EventArgs { if (pEvent != null) pEvent(sender, e); } /// /// Déclenche un évènement PropertyChanged en vérifiant si des handlers y sont abonnés /// /// L'évènement à déclencher /// L'objet à l'origine de l'évènement /// Le nom de la propriété qui a changé public static void Raise(this PropertyChangedEventHandler pEvent, object sender, string propertyName) { if (pEvent != null) pEvent(sender, new PropertyChangedEventArgs(propertyName)); } /// /// Déclenche un évènement PropertyChanged en vérifiant si des handlers y sont abonnés /// /// Type de la propriété qui a changé /// L'évènement à déclencher /// L'objet à l'origine de l'évènement /// L'expression indiquant la propriété qui a changé public static void Raise(this PropertyChangedEventHandler pEvent, object sender, Expression> expression) { string propertyName = GetPropertyName(expression); pEvent.Raise(sender, propertyName); } private static string GetPropertyName(Expression> expression) { MemberExpression mExpr = expression.Body as MemberExpression; if (mExpr == null) throw new ArgumentException(ExceptionMessages.ExpressionMustBePropertyAccess); return mExpr.Member.Name; } } }