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