andrew4582

ViewModelBase

Oct 12th, 2012
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.43 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Linq;
  5. using System.Linq.Expressions;
  6. using System.Text;
  7.  
  8. namespace System.Windows.Input
  9. {
  10.     public class ViewModelBase : INotifyPropertyChanged
  11.     {
  12.  
  13.         public event PropertyChangedEventHandler PropertyChanged;
  14.         public void OnPropertyChanged(string propertyName)
  15.         {
  16.             if (PropertyChanged != null)
  17.                 PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
  18.         }
  19.  
  20.         /// <summary>
  21.         /// Fires the Notify Property Changed event
  22.         /// </summary>
  23.         public virtual void OnPropertyChanged<T>(Expression<Func<T>> expression)
  24.         {
  25.  
  26.             string propertyName = GetPropertyName(expression);
  27.             PropertyChangedEventHandler handler = PropertyChanged;
  28.             if (handler != null)
  29.                 handler(this, new PropertyChangedEventArgs(propertyName));
  30.         }
  31.  
  32.         /// <summary>
  33.         /// Gets the string name for the property
  34.         /// </summary>
  35.         protected virtual string GetPropertyName<T>(Expression<Func<T>> expression)
  36.         {
  37.             if (expression.NodeType != ExpressionType.Lambda)
  38.             {
  39.                 throw new ArgumentException("Value must be a lamda expression", "expression");
  40.             }
  41.  
  42.             if (!(expression.Body is MemberExpression))
  43.             {
  44.                 throw new ArgumentException("The body of the expression must be a memberref", "expression");
  45.             }
  46.  
  47.             MemberExpression memberExpression = (MemberExpression)expression.Body;
  48.             return memberExpression.Member.Name;
  49.         }
  50.     }
  51.  
  52.  
  53. }
Advertisement
Add Comment
Please, Sign In to add comment