MVVM的一点感悟

  MVVM经典之处:

  1.使用Binding;2.使用Command;3.使用委托

  后台数据变化,怎么通知UI跟着变化

  首先看一下Binding。UI上使用Binding来获得数据的元素,会逐层的从各层的DataContext去寻找绑定属性对应的数据,当然找到一个后就不往后找了,找的过程则是调用了get访问器获得相关属性的值。在MVVM中,后台的数据变了,是怎么通知UI的呢?INotifyPropertyChanged,通过INotifyPropertyChanged对set访问器的监视,数据被重新设置,就会被INotifyPropertyChanged检测到,通过INotifyPropertyChanged里面的委托PropertyChanged实现了通知UI的功能。

  点击控件事件,怎么执行到自己写的ViewModel中的方法

  这里要看看Command。按钮的Command属性通过Binding设置的,如<Button x:Name="btnCreate" Command="{Binding CreateUser}" />,因为使用Binding绑定数据,上面说的依然成立,就是要去DataContext中去找,也是逐层找,找到第一个就不找了,对于Command找数据的时候,只会找继承了ICommand接口的属性,而继承ICommand接口必须实现 bool CanExecute(object parameter)和void Execute(object parameter)方法,也就是说当我点击了上面的按钮以后,在后台找到的实现了ICommand的类型的属性就会执行CanExecute和Execute,这个时候我们就可以在继承了ICommand的类里面写我们需要的委托了,因为委托能让我们在需要的时候对功能实现扩展。接下来就是在Execute里面执行这些委托了,这样就形成这么一条路:点button->找Command->找到相应的Command(实现了ICommand接口的类型的属性)->执行CanExecute和Execute(因为实现了接口ICommand,这两个事件是肯定要执行的)->从而在Execute里面委托将被执行,也就是说前面注册过这些委托的事件都可以执行了,要是我把自己写在ViewModel中的都方法注册了这些委托,点上面的button就理所当然的触发了这些注册的事件。

  也就是通过Binding、Command和委托(事件委托等),实现了MVVM模式

posted on 2013-07-12 14:52  IT小料  阅读(221)  评论(0编辑  收藏  举报

导航