WPF是一种应用于UI开发的.net 框架,提到框架,似乎近几年的开发都是依托MVC开发模式或其变种。WPF采用的就是MVVM开发模式,即Model-View-ViewModel。
WPF的最大特色就是数据绑定,它把对象实例的某个属性暴露出来,再绑定给UI元素的暴露属性,从而实现多渠道方向的动态更新(多渠道方向是指,可自主选择UI影响Model数据,或Model数据影响UI,或双向互相影响等等)。
那么WPF是怎么实现这一特点的呢,应该是通过一种 通知机制(与事件触发的订阅机制相似)。最复杂也是最自主的方式,就是用我们的Model类实现INotifyPropertyChanged接口。这个接口的成员仅有一个PropertyChangedEventHandler类型的PropertyChanged事件。而实现该接口的类,需要实现一个NotifyPropertyChanged方法。
这个方法 就是数据绑定的关键吧,我们在需要暴露的属性的set方法中,调用该方法,即可达到每一次set属性的数值都会调用该方(如果调用了set但是没有改变数值,PropertyChanged事件将是null值,即不会通知),而该方法又会通过接口中的事件,查找订阅了该事件的元素,通知它们也做出改变。
除去数据绑定,WPF的另一大特点就是XAML的控件开发。XAML是XML的一种扩展,开发界面更直观简单。在WPF中,每个控件都是由一个XAML文件和一个CS文件组成的。XAML用于实现界面,CS用于编写业务逻辑代码,在CS文件中我们可以通过XAML的UI元素的Name属性来获取UI实例,XAML中也可以注册CS文件的某些方法(类似于事件订阅机制)。
为什么两个不同类型的文件,能够如此方便直接的互相取用对方的成员呢?其实,仔细观察CS文件的类声明处,我们会发现partial关键字,而XAML也会有X:Class这一属性。真相隐藏在编译器之后,XAML经过编译器处理,会生成一个带有partial关键字的CS文件,而两个同一路径的partial CS文件本就是共通的。如此一来,开发人员既可以使用XAML专心开发界面,又能保证UI元素和业务逻辑的互相关联。
以上是我接触WPF框架的一些小心得,比较啰嗦,但也实在。