本文共 2840 字,大约阅读时间需要 9 分钟。
一、View
View视图层 就是xaml文件 主要就是界面的设计 xaml.cs文件只有默认生成的代码,MVVM模式一般不用将页面的数据初始化,事件处理的代码写在xaml.cs上 数据初始化可以通过数据绑定来实现 事件的处理也是通过绑定Command来实现先添加资源 这里是放在App.xaml上加载
<!--这里是将你写好的ViewModel放到了程序资源里面去,接下来的绑定将会用到的--> <Application.Resources> <vm:GlobalViewModelLocator xmlns:vm="clr-namespace:MyProject.ViewModels" x:Key="Locator" /> </Application.Resources> MyProject.ViewModels是命名空间 GlobalViewModelLocator则是你写好的ViewModel类 资源的key用Locator来表示 当然 你也可以通过在具体的页面来实现上加载ViewModel作为资源在xaml页面上就可以绑定ViewModel了
如 <phone:PhoneApplicationPage …… DataContext="{Binding MainViewModel, Source={StaticResource Locator}}" …… "> 这样就绑定了 之前定义的ViewModel资源啦然后呢 你就可以在页面的控件上绑定到ViewModel的定义好的数据和Command命令了(有些项目会将Command与ViewModel完完全全分开工作,个人觉得Command放在ViewModel进行初
始化和调用会更加好一些,也就是说所有的绑定无论是数据或者是Command命令都是放在ViewModel)
如 <TextBlock Grid.Row="1" Text="{Binding Item.AverageRating}" Margin="0,0,8,0" FontSize="24" VerticalAlignment="Center" /> 这是绑定了ViewModel的数据<i:Interaction.Triggers>
<li:TapTrigger> <cmd:EventToCommand Command="{Binding TapCommand}" PassEventArgsToCommand="True"/> </li:TapTrigger> </i:Interaction.Triggers> 这是绑定了ViewModel的Command命令 这个是使用了MVVM Light toolkit框架的写法 二、ViewModel ViewModel是视图模型层 这一层是负责了对View视图层展现以及各种事件的处理 灰常灰常重要 实现ViewModel层的方法很多 可以通过继承INotifyPropertyChanged 接口实现 继承ViewModelBase基类来实现 继承IEnumerable<T>接口来实现 使用第三方框架的基类实现等等 继承INotifyPropertyChanged 接口实现语法如下 public class PersonViewModel : INotifyPropertyChanged { private string firstNameValue; public string FirstName{ get { return firstNameValue; } set { firstNameValue=value; // 通知FirstName属性的改变 NotifyPropertyChanged("FirstName"); } }// 定义PropertyChanged 事件
public event PropertyChangedEventHandler PropertyChanged;public void NotifyPropertyChanged(string propertyName)
{ if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } } 其实ViewModel类的原理都是大同小异的 简单地说就是它的属性能够动态地变化,因为要跟View层交互 Command命令一般都需要定义成独立的类来实现,然后再ViewModel上实例化 Command命令类的实现的方法也几种方法 比如继承ICommand 使用第三方组件的Command命令的类 继承ICommand 的语法如下 public class MyCommand<T> : ICommand { Action<T> Excuted; Func<bool> canExcute; public ShowMessageCommand(Action<T> excuted) { this.Excuted = excuted;}
public bool CanExecute(object parameter)
{ return true; }public event EventHandler CanExecuteChanged;
public void Execute(object parameter)
{ //你的需要执行的代码 } } View层要传递的参数等等都可以通过数据绑定来获取然后再在Command命令中处理,最后再通过数据绑定展现在View视图层上三、Model
Model层比较简单就是一个面向对象的实体类比如
public class Person { public int age { get; set; } public string name { get; set; } }public class Persons
{ public List<Person> person; public List<Person> getPerson() { person = new List<Person>() { new Person{name = "Tom", age = 21 }, new Person{name = "Jack", age = 22 }, new Person{name = "Rose", age = 23 }, }; return person; } }Model层是主要的作用就是将信息用面向对象的方法封装起来,然后给ViewModel层使用
本文转自linzheng 51CTO博客,原文链接:http://blog.51cto.com/linzheng/1078632
转载地址:http://aykzl.baihongyu.com/