INotifiyPropertyChanged接口和DependencyObject两种方式实现的可绑定属性的区别

INotifiyPropertyChanged接口和DependencyObject两种方式实现的可绑定属性的区别

以下仅为个人总结,如有错误,还请指正

  • DependencyObject实现的依赖属性,写法上相对复杂一些,每个属性都要自己写Set和Get方法;INotifyPropertyChanged只需要在基类中实现一个属性修改的方法,就可以在子类中多个属性使用
  • Dep的属性只有创建该对象的线程可以访问,而实现了INotifyPropertyChanged的接口的类的属性,不要求主线程也可以修改
  • 在使用效果上,暂时未发现两者的差别
  • 在程序卡的时候——例如出现较多的异常导致程序卡顿的时候,INotifyPropertyChanged接口的属性,如果是后台线程操作实现的属性,可能导致界面无法刷新;如果使用主线程也还是可以刷新。
  • 如果单个属性,用DependencyObject实现,如果是一个类有多个属性,则用INotify。。。实现。
  • 前者(INotify)是通知,后者是依赖属性,概念上也不一样
  • 好像,Dep方式,对于集合无效?
  • 根据StackOverFlow的说法,区别还有几个:点我访问StackOverFlow上的讨论贴
    • 继承依赖属性类的类不被标记为可序列化——DependencyObjects are not marked as serializable
    • 依赖属性类重写并Seal了该类的子类的GetHashCode和Equals方法
    • 有线程要求,依赖属性类的依赖属性只能由创建线程访问。
    • DP要求创建DP的线程和创建使用DP、绑定到DP的控件的线程一样。——延伸问题,后台线程可以创建UI控件吗——可以,然后这个后台线程就拥有了UI控件(及其所有子控件)一个控件由哪个线程创建,那么这个控件就属于哪个线程,这个控件的所有操作都智能由这个线程执行
    • DP通常仅用于UI,不用于业务层。
    • DP依赖WPF库(要引用WindowBase.dll),而INotifyPropertyChanged仅仅需要引用系统库(System.dll)——基本上C#程序都要引用
    • DP性能更好:点我访问微软的解释
    • ViewModel通常用INotify: A DependencyProperty is never required for a ViewModel
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值