#region CPL License /* Nuclex Framework Copyright (C) 2002-2012 Nuclex Development Labs This library is free software; you can redistribute it and/or modify it under the terms of the IBM Common Public License as published by the IBM Corporation; either version 1.0 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the IBM Common Public License for more details. You should have received a copy of the IBM Common Public License along with this library */ #endregion using System; #if !NO_LINQ_EXPRESSIONS using System.Linq.Expressions; #endif namespace Nuclex.Support { /// Contains helper methods for observing property changed public static class ObservableHelper { #if !NO_LINQ_EXPRESSIONS /// Obtains the name of a property from a lambda expression /// /// Lambda expression for the property whose name will be returned /// /// The name of the property contained in the lamba expression /// /// /// This method obtains the textual name of a property specified in a lambda /// expression. By going through a lambda expression, the property will be /// stated as actual code, allowing F2 refactoring to correctly update any /// references to the property when it is renamed. /// /// /// /// string propertyName = ObservableHelper.GetPropertyName(() => SomeValue); /// Assert.AreEqual("SomeValue", propertyName); /// /// /// public static string GetPropertyName(Expression> property) { var lambda = (LambdaExpression)property; MemberExpression memberExpression; { var unaryExpression = lambda.Body as UnaryExpression; if(unaryExpression != null) { memberExpression = (MemberExpression)unaryExpression.Operand; } else { memberExpression = (MemberExpression)lambda.Body; } } return memberExpression.Member.Name; } #endif // !NO_LINQ_EXPRESSIONS } } // namespace Nuclex.Support