博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MVVM Light 新手入门(2) :ViewModel / Model 中定义“属性” ,并在View中调用
阅读量:5129 次
发布时间:2019-06-13

本文共 2575 字,大约阅读时间需要 8 分钟。

今天学习MVVM架构中“属性”的添加并调用,特记录如下,学习资料均来自于网络,特别感谢的系列。

 

一个窗口的基本模型如下:

View(视图) -> ViewModel (视图模型)-> 多个Model(模型)

注:

  1. 视图是用户在屏幕上看到的结构、布局和外观(UI)
  2. 视图模型是暴露公共属性和命令的视图的抽象。在视图模型中,绑定器在视图和数据绑定器之间进行通信。
  3. 模型是指代表真实状态内容的领域模型(面向对象),或指代表内容的数据访问层(以数据为中心)。

 

下面开始学习最基础的写法

1、新建一个Model

public class WelcomeModel : ObservableObject    {        private String introduction;        ///         /// 欢迎词        ///         public String Introduction        {            get { return introduction; }            set { introduction = value; RaisePropertyChanged(() => Introduction); }        }    }

 

  • 这个Model继承了一个父类:ObservableObject,这个父类的作用就是保证能够检测属性是否被改变。它实现了INotifyPropertyChanged接口,通过触发PropertyChanged事件达到通知UI更改的目的;
  • 实体里面定义的每个属性都加上RaisePropertyChanged(PropertyName)的调用,就可以实现对UI的交互更新了。
2、新建一个VideModel,来负责跟View的交互
public class WelcomeViewModel : ViewModelBase    {        ///         /// 构造函数        ///         public WelcomeViewModel()        {            Welcome = new WelcomeModel() { Introduction = "Hello World!" };        }        #region 属性        private WelcomeModel welcome;        ///         /// 欢迎词属性        ///         public WelcomeModel Welcome        {            get { return welcome; }            set { welcome = value; RaisePropertyChanged(() => Welcome); }        }        #endregion    }
类包含了一个命名为Welcome的WelcomeModel属性,继承了ViewBaseModel父类,继承了ViewBaseModel父类,ViewBaseModel同时继承 ObservableObject类和ICleanup接口。所以他同样有INotifyPropertyChanged接口的能力,能够通过触发PropertyChanged事件达到通知View的目的;
 
3、写一个View,来显示和交互ViewModel。

TextBlock 绑定了 Welcome.Introduction,所以应该显示Welcome对象下的Introduction属性。

这时候的ViewModel和View是没有任何关系的,所以我们在code-Behind的构造函数中写上如下代码: 

using Pvd.ViewModel;using System.Windows;namespace Pvd.View{    ///     /// WelcomeView.xaml 的交互逻辑    ///     public partial class WelcomeView : Window    {        public WelcomeView()        {            InitializeComponent();            this.DataContext = new WelcomeViewModel();        }    }}

把 WelcomeViewModel 赋值给当前视图的数据上下文。所以可以在当前视图中使用ViewModel中所有的公开属性和命令。

 执行结果正常

 

 


 

总结:

1、通过 this.DataContext = new WelcomeViewModel(); 把 View 和 ViewModel 绑定。绑定后,可以直接在View中调用 ViewModel中公开的属性和命令

2、所有的VideModel 都需要继承于:ViewModelBase

3、所有的Model都继承于ObservableObject

4、定义属性方法如下,并在每个属性中都加上RaisePropertyChanged(PropertyName)的调用,就可以实现对UI的交互更新了。 

 

  private String ~introduction;

 

  public String Introduction

  {
    get { return ~introduction; }
    set { ~introduction= value; RaisePropertyChanged(() => Introduction); }
  } 



 

新手入门,理解上有偏差,请各位老师提宝贵意见。

 

 

转载于:https://www.cnblogs.com/pukki/p/10001564.html

你可能感兴趣的文章
spin用户态加锁源码分析
查看>>
小白学flask之路由,反向路由,路由参数
查看>>
第一个java程序
查看>>
WPF自定义空心文字
查看>>
FCKeditor插件开发实例:uploadify多文件上传插件
查看>>
spring boot 日志配置
查看>>
【程序员面试宝典】错题好题汇总ch5
查看>>
豆瓣,你的前端开发有点幽默了
查看>>
docker日志
查看>>
BZOJ 1057: [ZJOI2007]棋盘制作
查看>>
BZOJ 1070: [SCOI2007]修车
查看>>
asterisk常用调试监测命令
查看>>
一个不错的shell 脚本教程
查看>>
Flutter学习笔记(三)-- 事件交互和State管理
查看>>
iOS开发 之 不要告诉我你真的懂isEqual与hash!
查看>>
基于swift语言iOS8的蓝牙连接(初步)
查看>>
Swift基础--使用TableViewController自定义列表
查看>>
详述iOS国际化
查看>>
Swift - 分段选择控件(UISegmentedControl)的用法
查看>>
android 自定义progressDialog实现
查看>>