using System.ComponentModel;
using System.Linq.Expressions;
public static void Main()
Console.WriteLine("Hello World");
var notify = new NotifyPropertyChangedWrapper<Test>(test);
notify.PropertyChanged += (s, e) => Console.WriteLine("Property changed: " + e.PropertyName);
notify.Set(x => x.SomeProperty, 10);
Console.WriteLine("Value of SomeProperty: " + notify.Get(x => x.SomeProperty));
public int SomeProperty { get; set; }
public class NotifyPropertyChangedWrapper<T> : INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
public NotifyPropertyChangedWrapper(T item)
public TProp Get<TProp>(Expression<Func<T, TProp>> exp)
MemberExpression memExp = exp.Body as MemberExpression;
var property = memExp.Member as PropertyInfo;
return (TProp)property.GetValue(item);
public void Set<TProp>(Expression<Func<T, TProp>> exp, TProp newValue)
MemberExpression memExp = exp.Body as MemberExpression;
var property = memExp.Member as PropertyInfo;
property.SetValue(item, newValue);
PropertyChanged.Invoke(item, new PropertyChangedEventArgs(property.Name));