[转载]WPF自学笔记之--INotifyPropertyChanged的优雅使用
在利用WPF进行开发中,很多开发人员肯定会遇到这样的一个接口,INotifyPropertyChanged,它提供了一种后台数据的改变影响前台显示的,这个往往在我们开发的过程中很重要的一个功能,例如开发音乐播放器,聊天软件,等一些小的软件也用到,很多情况需要把后台的数据更改情况反映给前台从而进行响应反映给用户,下面看一下没有实现INotifyPropertyChanged接口的时候,是多么的糟糕:
Xaml:
这是一个很简单的例子,无论我们怎么按那个按钮,都不会在TextBox中得到任何的反映,但是我们断点一下发现,后台每次按那个按钮都会把n.NB的值+1,只是前台不反映而已,前台TextBox是绑定了那个NB属性的!!这个时候INotifyPropertyChanged接口就派上用场了,下面看一下对Number类型的修改:
利用C#中的继承,把重复的代码抽到积累中去,然后每次创建需要这个功能的类的时候就能声明为这个基类的子类就方便很多了~~下面看一下实现:
我把修改过的类都剪切上来了,其他的不便,好了看一下这个PropertyChangedBase基类,它把都系都包装起来了,用的时候就直接继承这个类,然后使用这个OnPropertyChanged方法就能实现这个功能了!!!但是可能你会觉得,这不是强类型,不安全啊,如果在传入参数的时候打错了,例如"NB"打成"MB",好了,编译器也不会出现错误的,这个时候就难找了,找到天昏地暗,都不知道找到哪里有错,好,下面运用强类型来修改一下这个基类,我们不断地往优雅和安全的方向走!~~~哈哈,下面看一下基类的修改还有客户端代码的改变,这里用到了泛型,树表达式的知识:
这样也能够使用了!!!但是看一下客户代码,好繁琐啊,OnPropertyChanged<int>(()=>this.NB),我们还是需要写int等参数传进去,如果能这样写那该多好,多帅,多霸气:OnPropertyChanged(p=>p.NB);~~~~!!!下面我们走向最最最帅的一步,哈哈~!这个要用到C#里面的方法扩展了!~