Created
May 20, 2017 18:24
-
-
Save velcrome/34951808c6b8005242b140b05080bd46 to your computer and use it in GitHub Desktop.
DependencyProperty helpers
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| public static class DependencyPropertyExtensions | |
| { | |
| public static T GetValue<T>(this DependencyObject obj, Expression<Func<T>> expression) | |
| { | |
| var dpd = DependencyHelper.GetDpdFromExpression(expression); | |
| return (T)dpd.GetValue(obj); | |
| } | |
| public static void SetValue<T>(this DependencyObject obj, Expression<Func<T>> expression, T value) | |
| { | |
| var dpd = DependencyHelper.GetDpdFromExpression(expression); | |
| dpd.SetValue(obj, value); | |
| } | |
| } | |
| public static class DependencyHelper | |
| { | |
| private static PropertyInfo GetPropertyInfoFromExpression(LambdaExpression lambda) | |
| { | |
| MemberExpression memberExpression; | |
| if (lambda.Body is UnaryExpression) | |
| { | |
| var unaryExpression = lambda.Body as UnaryExpression; | |
| memberExpression = unaryExpression.Operand as MemberExpression; | |
| } | |
| else | |
| { | |
| memberExpression = lambda.Body as MemberExpression; | |
| } | |
| return memberExpression.Member as PropertyInfo; | |
| } | |
| public static DependencyPropertyDescriptor GetDpdFromExpression<T>(Expression<Func<T>> expression) | |
| { | |
| var propertyInfo = GetPropertyInfoFromExpression(expression as LambdaExpression); | |
| Type type = (expression.Body as MemberExpression).Expression.Type; | |
| return DependencyPropertyDescriptor.FromName(propertyInfo.Name, type, type); | |
| } | |
| public static DependencyProperty Register<T, T2>(Expression<Func<T, T2>> expression, object defaultValue = null) | |
| { | |
| var propertyInfo = GetPropertyInfoFromExpression(expression as LambdaExpression); | |
| string dependencyPropertyName = propertyInfo.Name; | |
| DependencyProperty prop = DependencyProperty.Register( | |
| dependencyPropertyName, | |
| propertyInfo.PropertyType, | |
| typeof(T), | |
| new PropertyMetadata(defaultValue)); | |
| return prop; | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment