blob: 09c6302235ebb54e5f5cebca80b2c6c4ec4d441c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
using System;
using System.ComponentModel;
using System.Linq.Expressions;
namespace MVPtoMVVM.mvvm.viewmodels
{
public class Synchronizer<T> where T : INotifyPropertyChanged
{
private readonly Func<PropertyChangedEventHandler> eventHandler;
public Synchronizer(Func<PropertyChangedEventHandler> eventHandler)
{
this.eventHandler = eventHandler;
}
public void Update(T viewModel, Expression<Func<T, object>> property)
{
eventHandler()(viewModel, new PropertyChangedEventArgs(GetPropertyNameFrom(property)));
}
string GetPropertyNameFrom(Expression<Func<T, object>> 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 "";
}
}
}
|