• 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层使用

  • 相关阅读:
    Python什么是二次开发的意义?python在.net项目采用
    斐波那契数
    Java 兑换ObjectC代码
    第18本:《整理的艺术》
    第16本:《视觉繁美:信息可视化方法与案例解析》
    第14本:《李鸿章传》
    第10本:《设计心理学》
    第17本:《代码的未来》
    第15本:《视不可当----信息图与可视化传播》
    第13本:《富爸爸,穷爸爸》
  • 原文地址:https://www.cnblogs.com/linzheng/p/1991966.html
Copyright © 2020-2023  润新知