Windows Phone 7 MVVM模式的学习笔记

简介:

一、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

相关文章
|
21天前
|
固态存储 Windows
台式机的Windows10如何设置性能模式
【5月更文挑战第25天】台式机的Windows10如何设置性能模式
17 0
|
1月前
|
网络协议 Shell vr&ar
某教程学习笔记(一):1、windows基础
某教程学习笔记(一):1、windows基础
22 0
|
1月前
|
Web App开发 Windows
Windows【Chrome浏览器 02】Auto Dark Mode for Web Contents 无需安装插件开启chrome浏览器黑暗模式
Windows【Chrome浏览器 02】Auto Dark Mode for Web Contents 无需安装插件开启chrome浏览器黑暗模式
164 0
|
8月前
|
Windows
[笔记] Windows内核课程:保护模式《二》段寄存器介绍
[笔记] Windows内核课程:保护模式《二》段寄存器介绍
|
8月前
|
C语言 Windows
[笔记] Windows内核课程:保护模式《一》保护模式
[笔记] Windows内核课程:保护模式《一》保护模式
|
8月前
|
缓存 编译器 调度
[笔记]Windows核心编程《七》用户模式下的线程同步
[笔记]Windows核心编程《七》用户模式下的线程同步
|
Linux Windows
Elasticsearch-03 CentOS7 / Windows上部署Elasticsearch5.6.16集群模式
Elasticsearch-03 CentOS7 / Windows上部署Elasticsearch5.6.16集群模式
105 0
|
SQL 安全 数据库
SQL Server 2005 Windows验证如何改为混合模式验证
SQL Server 2005 Windows验证如何改为混合模式验证
257 0
|
开发工具 iOS开发 MacOS
windows虚拟机vim退出编辑模式
windows虚拟机vim退出编辑模式
430 0
|
数据安全/隐私保护 Windows
第二轮学习笔记:二、Windows基础
第二轮学习笔记:二、Windows基础
68 0
第二轮学习笔记:二、Windows基础