using System; using System.ComponentModel; using System.Linq.Expressions; namespace MVPtoMVVM.mvvm.viewmodels { public class Synchronizer where T : INotifyPropertyChanged { private readonly Func eventHandler; public Synchronizer(Func eventHandler) { this.eventHandler = eventHandler; } public void Update(T viewModel, Expression> property) { eventHandler()(viewModel, new PropertyChangedEventArgs(GetPropertyNameFrom(property))); } string GetPropertyNameFrom(Expression> property) { if (property.Body.NodeType == ExpressionType.Convert) { var body = (UnaryExpression)property.Body; return (body.Operand as MemberExpression).Member.Name; } if (property.Body.NodeType == ExpressionType.MemberAccess) { return (property.Body as MemberExpression).Member.Name; } return ""; } } }