Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. public class ViewModelBase : INotifyPropertyChanged
  2.     {
  3.         #region interface
  4.  
  5.         public event PropertyChangedEventHandler PropertyChanged = delegate { };
  6.  
  7.         #endregion
  8.  
  9.         public void NotifyOfPropertyChange(string propertyName)
  10.         {
  11.             PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
  12.         }
  13.  
  14.         public void NotifyOfPropertyChange<TProperty>(Expression<Func<TProperty>> property)
  15.         {
  16.             var lambda = (LambdaExpression)property;
  17.  
  18.             MemberExpression memberExpression;
  19.             if (lambda.Body is UnaryExpression)
  20.             {
  21.                 var unaryExpression = (UnaryExpression)lambda.Body;
  22.                 memberExpression = (MemberExpression)unaryExpression.Operand;
  23.             }
  24.             else
  25.                 memberExpression = (MemberExpression)lambda.Body;
  26.  
  27.             NotifyOfPropertyChange(memberExpression.Member.Name);
  28.         }
  29.  
  30.         protected bool SetProperty<T>(ref T backingField, T value, string propertyName)
  31.         {
  32.             var changed = !EqualityComparer<T>.Default.Equals(backingField, value);
  33.             if (changed)
  34.             {
  35.                 backingField = value;
  36.                 NotifyOfPropertyChange(propertyName);
  37.             }
  38.             return changed;
  39.         }
  40.         protected bool SetProperty<T, TProperty>(ref T backingField, T value, Expression<Func<TProperty>> property)
  41.         {
  42.             var changed = !EqualityComparer<T>.Default.Equals(backingField, value);
  43.             if (changed)
  44.             {
  45.                 backingField = value;
  46.                 NotifyOfPropertyChange(property);
  47.             }
  48.             return changed;
  49.         }
  50.     }