Mercurial > silverbladetech
view MetroWpf/MetroWpf.Framework/Extensions/PropertyExtensions.cs @ 64:ba89e36631bc
Latest version
author | Steven Hollidge <stevenhollidge@hotmail.com> |
---|---|
date | Sun, 22 Apr 2012 14:20:52 +0100 |
parents | 060f02cd4591 |
children |
line wrap: on
line source
using System; using System.ComponentModel; using System.Linq.Expressions; namespace Chronos.Presentation.ViewModel { /// <summary> /// Property Extension Methods /// </summary> /// <remarks> /// http://reyntjes.blogspot.com/2009/04/master-detail-viewmodel_24.html /// http://blogs.ugidotnet.org/bmatte/archive/2008/11/28/pattern-model-view-viewmodel-inotifypropertychanged-static-reflection-e-extension-methods.aspx /// </remarks> public static class PropertyExtensions { #region · Extension Methods · /// <summary> /// Creates a <see cref="PropertyChangedEventArgs" /> instance for a given property. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="property">The property.</param> /// <returns></returns> public static PropertyChangedEventArgs CreateChangeEventArgs<T>(this Expression<Func<T>> property) { var expression = property.Body as MemberExpression; var member = expression.Member; return new PropertyChangedEventArgs(member.Name); } /// <summary> /// Returns property name from expression /// </summary> /// <typeparam name="T"></typeparam> /// <param name="property"></param> /// <returns></returns> public static string GetPropertyName<T>(this Expression<Func<T>> property) { var expression = property.Body as MemberExpression; return expression.Member.Name; } /// <summary> /// Return property name from expression. /// </summary> /// <example> /// <![CDATA[ /// Expression<Func<Item, object>> expression = i => i.Name; /// var propertyName = expression.GetPropertyName(); // propertyName = "Name" /// ]]> /// </example> /// <typeparam name="T"></typeparam> /// <typeparam name="TValue"></typeparam> /// <param name="expression"></param> /// <returns></returns> public static string GetPropertyName<T, TValue>(this Expression<Func<T, TValue>> expression) { var lambda = expression as LambdaExpression; MemberExpression memberExpression; if (lambda.Body is UnaryExpression) { var unaryExpression = lambda.Body as UnaryExpression; memberExpression = unaryExpression.Operand as MemberExpression; } else { memberExpression = lambda.Body as MemberExpression; } if (memberExpression != null) { return memberExpression.Member.Name; } return null; } #endregion } }