public abstract class NotificationObject : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
 
    protected virtual void RaisePropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = this.PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
 
    protected void RaisePropertyChanged(params string[] propertyNames)
    {
        if (propertyNames == null) throw new ArgumentNullException("propertyNames");
 
        foreach (var name in propertyNames)
        {
            this.RaisePropertyChanged(name);
        }
    }
 
    protected void RaisePropertyChanged<T>(Expression<Func<T>> propertyExpression)
    {
        var propertyName = ExtractPropertyName(propertyExpression);
        this.RaisePropertyChanged(propertyName);
    }
 
    public static string ExtractPropertyName<T>(Expression<Func<T>> propertyExpression)
    {
        if (propertyExpression == null)
        {
            throw new ArgumentNullException("propertyExpression");
        }
 
        var memberExpression = propertyExpression.Body as MemberExpression;
        if (memberExpression == null)
        {
            throw new ArgumentException("PropertySupport_NotMemberAccessExpression_Exception", "propertyExpression");
        }
 
        var property = memberExpression.Member as PropertyInfo;
        if (property == null)
        {
            throw new ArgumentException("PropertySupport_ExpressionNotProperty_Exception", "propertyExpression");
        }
 
        var getMethod = property.GetGetMethod(true);
        if (getMethod.IsStatic)
        {
            throw new ArgumentException("PropertySupport_StaticExpression_Exception", "propertyExpression");
        }
 
        return memberExpression.Member.Name;
    }
}

最新文章

  1. 72. 求m到n之和
  2. 用Mockito mock普通的方法
  3. 在Windows server 2008 R2上安装Python3.5
  4. jQuery-表格以及表单
  5. hdu 2049 不容易系列之(4)——考新郎
  6. wikioi 1205 单词倒排
  7. Java Day 12
  8. C# Thread多线程学习
  9. ZOJ-2112-Dynamic Rankings(线段树套splay树)
  10. 关于oledb对Excel的读取
  11. USACO 4.1 Fence Loops(Floyd求最小环)
  12. NYOJ-1036 非洲小孩(贪心)
  13. [转]亿级Web系统搭建:单机到分布式集群
  14. 微信小程序实现瀑布流布局
  15. Pthread:POSIX 多线程程序设计【转】
  16. PHP冒泡排序-手写
  17. 知识点:Java 集合框架图
  18. Python中删除easy_install安装的包
  19. html05
  20. 三,PHP缓存机制实现页面静态化

热门文章

  1. nyoj 353 3D dungeon
  2. UVA 10194 Football (aka Soccer)
  3. UVA 10557 XYZZY
  4. 【Struts2+Spring3+Hibernate3】SSH框架整合实现CRUD_1.3
  5. SpringMVC 常用注解
  6. ASP.NET MVC- MvcPager
  7. Spring技术内幕——深入解析Spring架构与设计原理(一)IOC实现原理
  8. 连接数据库超时设置autoReconnect=true
  9. linux系统下安装apache与tomcat
  10. 【美妙的Python之二】Python初步