public static class NotificationExtensions
{
///
/// Subscribe to PropertyChange notifications for the given property.
///
///
/// Implementer of that the events are going to be coming from.
///
///
/// Lambda expression pointing to the property that you want to receive change notifications for.
///
///
/// Event handler of the PropertyChange notifications.
///
public static void SubscribeToChanges(
this T notifier,
Expression> propertyExpression,
PropertyChangedEventHandler handler)
where T : INotifyPropertyChanged
{
MemberExpression memberExpression;
var unaryExpression = propertyExpression.Body as UnaryExpression;
if (unaryExpression != null)
{
memberExpression = (MemberExpression)unaryExpression.Operand;
}
else
{
memberExpression = (MemberExpression)propertyExpression.Body;
}
var propertyInfo = (PropertyInfo)memberExpression.Member;
string propertyName = propertyInfo.Name;
notifier.PropertyChanged += (s, e) =>
{
if (e.PropertyName.Equals(propertyName) || string.IsNullOrEmpty(e.PropertyName))
{
handler(s, e);
}
};
}
}