using System;
using System.ComponentModel;
using System.Linq.Expressions;
using System.Reflection;
using System.Text.RegularExpressions;
using System.Windows;
using System.Windows.Input;
namespaceCommon.WPF
{
publicabstractclassBaseViewModel : INotifyPropertyChanged
{
#region INotifyPropertyChanged Members and helperreadonly NotifyPropertyChangedHelper _propertyChangeHelper = new NotifyPropertyChangedHelper();
publicevent PropertyChangedEventHandler PropertyChanged
{
add { _propertyChangeHelper.Add(value); }
remove { _propertyChangeHelper.Remove(value); }
}
protectedvoidOnPropertyChanged(string propertyName)
{
_propertyChangeHelper.NotifyPropertyChanged(this, propertyName);
}
protectedvoid OnPropertyChanged<T>(Expression<Func<T>> propertyExpression)
{
OnPropertyChanged(ExtractPropertyName(propertyExpression));
}
staticstring ExtractPropertyName<T>(Expression<Func<T>> propertyExpression)
{
if (propertyExpression == null)
thrownew ArgumentNullException(nameof(propertyExpression));
var memberExpression = propertyExpression.Body as MemberExpression;
if (memberExpression == null)
thrownew ArgumentException("The expression is not a member access expression.", nameof(propertyExpression));
var property = memberExpression.Member as PropertyInfo;
if (property == null)
thrownew ArgumentException("The member access expression does not access a property.", nameof(propertyExpression));
return property.Name;
}
#endregion
}
}