master
1using System;
2using System.ComponentModel;
3using System.Linq.Expressions;
4
5namespace MVPtoMVVM.mvvm.viewmodels
6{
7 public class Synchronizer<T> where T : INotifyPropertyChanged
8 {
9 private readonly Func<PropertyChangedEventHandler> eventHandler;
10
11 public Synchronizer(Func<PropertyChangedEventHandler> eventHandler)
12 {
13 this.eventHandler = eventHandler;
14 }
15
16 public void Update(T viewModel, Expression<Func<T, object>> property)
17 {
18 eventHandler()(viewModel, new PropertyChangedEventArgs(GetPropertyNameFrom(property)));
19 }
20
21 string GetPropertyNameFrom(Expression<Func<T, object>> property)
22 {
23 if (property.Body.NodeType == ExpressionType.Convert)
24 {
25 var body = (UnaryExpression)property.Body;
26 return (body.Operand as MemberExpression).Member.Name;
27 }
28 if (property.Body.NodeType == ExpressionType.MemberAccess)
29 {
30 return (property.Body as MemberExpression).Member.Name;
31 }
32 return "";
33 }
34 }
35}