一、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层使用

转载于:https://www.cnblogs.com/linzheng/archive/2011/03/22/1991966.html

Windows Phone 7 MVVM模式的学习笔记相关推荐

  1. Windows Phone 7 MVVM模式通讯方式之实现Command

    MVVM模式的View与ViewModel的三大通讯方式:Binding Data(实现数据的传递).Command(实现操作的调用)和Attached Behavior(实现控件加载过程中的操作). ...

  2. .net设计模式 (享元模式)学习笔记

    运用设计模式只是为了解决一类问题的,当解决掉当前一类问题,通常会在解决这个问题时候 带来其他问题  合理应用扬长避短 结构性设计模式:关注的是类与类之间的关系 .net设计模式 (享元模式)学习笔记 ...

  3. 电子绘画画笔笔刷模式的学习笔记

    PS画笔笔刷模式的学习笔记 笔刷基础 画笔本身的性质 理解画笔在计算机层面上的实现方式 图层之间关系 总结 笔刷基础 本学习笔记以Photoshop为例,讲解电子绘画的画笔.图层的关系. 画笔本身的性 ...

  4. windows系统的fiddler抓包学习笔记(2020-03-30 星期一)

    1.学习http协议 1)HTTP请求报文 a.请求方法 b.URL c.请求头 2)HTTP响应报文 a.状态码 2.fiddler 1)fiddler页面简介 2)fiddler工具条按钮的介绍 ...

  5. UML和模式应用学习笔记-1(面向对象分析和设计)

    大学时曾经开过<UML和模式应用>的课程,当时没有引起足够的重视,只为了应付考试并没有真正掌握书中的内容:现在工作中经常要用到UML及设计模式,决定每周花点时间重新对书中的内容进行学习:本 ...

  6. Windows Phone 7 MVVM模式数据绑定和传递参数

    数据绑定使用了ObservableCollection<T> 类来实现,ViewModel通过继承GalaSoft.MvvmLight.ViewModelBase类来实现,Command ...

  7. Windows内核安全与驱动编程学习笔记----1.WDK安装

    WDK安装安装 1.WDK下载 VS2019设置 EWDK使用 注意事项 错误解决方法 系统错误1275 系统错误557 1.WDK下载 微软已经不再使用connect.microsoft.com,新 ...

  8. JavaScript设计模式之策略模式(学习笔记)

    在网上搜索"为什么MVC不是一种设计模式呢?"其中有解答:MVC其实是三个经典设计模式的演变:观察者模式(Observer).策略模式(Strategy).组合模式(Composi ...

  9. 模式的学习笔记----转摘自把爱好作为自己工作的人

    最近,Microsoft越来越强调设计模式.如果你不熟悉设计模式,那么你会被这些新的术语和从来没有看见到的UML图所淹没.这次对设计模式的强调,相对于词汇的变化来讲,在方法论上并没有太多的变换,因为M ...

  10. Facade模式——设计模式学习笔记

    Facade模式 一 意图 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 二 动机 将一个系统划分成为若干个子系统有利于降低系统的复 ...

最新文章

  1. selenium 操作 html 5,[Selenium] WebDriver 操作 HTML5 中的 video
  2. Spark任务调度流程及调度策略分析
  3. X86汇编——简易通讯录
  4. Spring boot指定日志配置
  5. linux注释内容,Linux 中snmptrapd的内容有大虾能帮我注释下吗?谢谢了
  6. 真格量化——50etf与期权对冲策略
  7. 2019年普通高等程序员招生统一考试
  8. 面试总结之人工智能AI(Artificial Intelligence)/ 机器学习(Machine Learning)
  9. Tyvj P1016 包装问题 (DP)
  10. 蓝奏(lanzous)解析工具
  11. java cryptojs_CryptoJS用法
  12. Mysql监控工具–mytop
  13. Ehcache 的简单使用
  14. 几行烂代码,我赔了16万。
  15. 个人计算机架构和相关的设备组件
  16. ECC椭圆曲线算法(1)阿贝尔群
  17. 考研政治——马克思辩证法中的两大特征和五大范畴
  18. Android 12 Watchdog(4) Trace生成过程
  19. JavaScript 高级
  20. 解决导出CSV文件乱码的问题

热门文章

  1. 数据挖掘学习07 - 《数据挖掘导论》第二章:数据
  2. mysql查询4-6_MySQL学习(四)查询
  3. python 传递带参数的函数_Python 函数的参数传递
  4. inline-block的几个问题(还没解决)
  5. ZMQ中线程之间发送命令
  6. C++_运算符重载 再思考
  7. CSDN Markdown帮助文档
  8. 主题桌面 树莓派4b经典_用树莓派4b构建深度学习应用(一)硬件篇
  9. c语言的加法和平均值程序,编写求一组整数的和与平均值的程序
  10. Java Script之创建对象