Information Technology Reference
In-Depth Information
public static class PropertyNotifyExtensions
{
public static T SetNotifyProperty<T>( this
PropertyChangedEventHandler handler,
T newValue, Expression < Func <T>> oldValueExpression,
Action <T> setter)
{
return SetNotifyProperty(handler, null , newValue,
oldValueExpression, setter);
}
public static T SetNotifyProperty<T>( this
PropertyChangedEventHandler postHandler,
PropertyChangingEventHandler preHandler,
T newValue, Expression < Func <T>> oldValueExpression,
Action <T> setter)
{
Func <T> getter = oldValueExpression.Compile();
T oldValue = getter();
if (!oldValue.Equals(newValue))
{
var body = oldValueExpression.Body as
System.Linq.Expressions. MemberExpression ;
var propInfo = body.Member as PropertyInfo ;
string propName = body.Member.Name;
// Get the target object
var targetExpression = body.Expression as
ConstantExpression ;
object target = targetExpression.Value;
if (preHandler != null )
preHandler(target, new
PropertyChangingEventArgs (propName));
// Use Reflection to do the set:
// propInfo.SetValue(target, newValue, null);
//var compiledSetter = setter.Compile();
setter(newValue);
Search WWH ::




Custom Search