MVVM主要是为了逻辑代码和视图的分离,使CodeBehind只包含对UI的操作。通过绑定和Command来实现

下面我们实现一个最简单的示例,点击按钮使年龄加1.

XAML代码

<Window x:Class="DeepXAML.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:DeepXAML"       xmlns:sys="clr-namespace:System;assembly=mscorlib"xmlns:cl="clr-namespace:System.Collections;assembly=mscorlib"Title="MainWindow" Height="250" Width="450"><StackPanel><TextBox Text="{Binding Path=Name}"></TextBox><TextBox Text="{Binding Path=Age}"></TextBox><Button Command="{Binding Path=AddAge}" >Add Age</Button></StackPanel>
</Window>

MainPageViewModel

 public class MainPageViewModel : INotifyPropertyChanged{public event PropertyChangedEventHandler PropertyChanged;private string name;public string Name {get { return name; }set {name = value;if (this.PropertyChanged != null){this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Name"));}}}private int age;public int Age {get { return age; }set{age = value;if (this.PropertyChanged != null){this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Age"));}}}public ICommand AddAge{get { return new AddAgeCommand(this); }}}
 public class AddAgeCommand : ICommand{private MainPageViewModel mMainPageViewModel;public AddAgeCommand(MainPageViewModel model){mMainPageViewModel = model;}public bool CanExecute(object parameter){return true;}public event EventHandler CanExecuteChanged;public void Execute(object parameter){this.mMainPageViewModel.Age += 1;}}

我们可以看一下后台只有很少代码:

public partial class MainWindow : Window{public MainWindow(){InitializeComponent();MainPageViewModel mainPageViewModel = new MainPageViewModel { Age = 20, Name = "Jack" };this.DataContext = mainPageViewModel;}      }

无废话WPF系列19:MVVM简单介绍相关推荐

  1. 无废话WPF系列5:控件派生图

    1. WPF类控件的派生关系图,紫色的部分开始才算是进入WPF的框架里. 2. WPF控件图 WPF的UI控件主要有以下类型,ContentControl, HeaderedContentContro ...

  2. WPF自学入门(十一)WPF MVVM模式Command命令 WPF自学入门(十)WPF MVVM简单介绍...

    WPF自学入门(十一)WPF MVVM模式Command命令 在WPF自学入门(十)WPF MVVM简单介绍中的示例似乎运行起来没有什么问题,也可以进行更新.但是这并不是我们使用MVVM的正确方式.正 ...

  3. openresty开发系列10--openresty的简单介绍及安装

    openresty开发系列10--openresty的简单介绍及安装 一.Nginx优点 十几年前,互联网没有这么火,软件外包开发,信息化建设,帮助企业做无纸化办公,收银系统,工厂erp,c/s架构偏 ...

  4. 关于st25系列NFC标签简单介绍及st25TV系列用于门禁读取时的注意事项总结

    关于st25系列NFC标签简单介绍及st25TV系列用于门禁读取时的注意事项总结 文章目录 关于st25系列NFC标签简单介绍及st25TV系列用于门禁读取时的注意事项总结 1. 前言 2. ST25 ...

  5. 无废话WCF系列教程 -- 李林峰

    李林峰的无废话WCF入门教程 无废话WCF入门教程一[什么是WCF] 无废话WCF入门教程二[WCF应用的通信过程] 无废话WCF入门教程三[WCF的宿主] 无废话WCF入门教程四[WCF的配置文件] ...

  6. IPFS技术系列之IPFS简单介绍

    前言   随着社会网络的不断发展,当前时代人们对网络资源的渴求越来越大,从文本.图片乃至视频文件.然而在人们的日常使用中,传统的HTTP协议的诟病一一浮现出来,于此同时其他的传输协议也不断兴起,IPF ...

  7. WPF真入门教程23--MVVM简单介绍

    在WPF开发中,经典的编程模式是MVVM,是为WPF量身定做的模式,该模式充分利用了WPF的数据绑定机制,最大限度地降低了Xmal文件和CS文件的耦合度,也就是UI显示和逻辑代码的耦合度,如需要更换界 ...

  8. 无废话ExtJs 入门教程十七[列表:GridPanel]

    无废话ExtJs 入门教程十七[列表:GridPanel] extjs技术交流,欢迎加群(521711109) 在Extjs中,GridPanel用于数据显示,即我们平时说的列表页.在本节中,我们先对 ...

  9. 无废话ExtJs 入门教程六[按钮:Button]

    无废话ExtJs 入门教程六[按钮:Button] extjs技术交流,欢迎加群(201926085) 继上一节内容,我们在表单里加了个两个按钮"提交"与重置.如下所示代码区的第6 ...

最新文章

  1. 通过 dhcp-agent 访问 Metadata - 每天5分钟玩转 OpenStack(168)
  2. 关于java包_关于Java包
  3. linux的系统移植——交叉编译器
  4. matlab的7.3版本是什么_MX Linux 19.3 发布,Debian和antiX Linux的混合版本
  5. android测试空指针什么意思,Android神秘的空指针异常
  6. java 状态模式 重试_java状态模式
  7. Python Tkinter之variable用法
  8. 磁珠 符号_如何理解电子元件磁珠?
  9. linux tar压缩文件命令,linux解压压缩命令tar详解
  10. 电工知识:常用电子元件名称及其对应图片实用大全
  11. 南宁刚经历1960年来5月最凉一周 降雨停歇气温将回升
  12. linux读取ads1115ADC例程
  13. react全家桶介绍
  14. 袋鼠云数据中台专栏(一) :浅析数据中台策略与建设实践
  15. python中pass关键字
  16. OSChina 周五乱弹 —— 夏日限定梦想
  17. 面试官:请讲一讲IO流核心模块与基本原理是什么?
  18. 【C++系列15】c++的正无穷和负无穷
  19. 如何使用E邮宝的热敏标签纸打印亚马逊外箱单?
  20. 川大数学系和计算机系,这两所985高校北师大和川大,数学专业是A档,考生该如何选择...

热门文章

  1. Logstash 基础入门
  2. SharePoint 2013 Nintex Workflow 工作流帮助(九)
  3. sql server 2005中的服务器角色[转]
  4. T-SQL之公用表表达式(CTE)
  5. Javascript实现最简跨平台面向对象拖拽
  6. 不经意传输(oblivious transfer)
  7. 数据分析实例:企业需要什么样的数据分析人才?
  8. __main代码分析
  9. Java代码中,如何监控Mysql的binlog?
  10. 干货|我在 GitHub 上发现了一款骚气满满的字体!