WPF新手快速入门系列 3.MVVM
【概要】
这一章主要讲述,讲述MVVM模式和用法。
如有学习过程中想交流学习、疑惑解答可以来此QQ群交流:580749909。(所有涉及到的源码都上传到了群文件里)
希望加群的人提问时尽量想清楚自己的问题,愿意钻研而不是等现成的答案而不去思考。祝各位同仁早日学会WPF这项技术。
【MVVM】
前言:MVVM的核心思想就是界面与代码分离,实现“解耦”。是一种开发模式,并不是一种开发框架。主要是以数据驱动的开发模式。
先从项目应用的角度来介绍一下MVVM是什么、怎么用、项目中该怎么建项目结构。
话不多说直接上图:

图中的结构一眼就能看明白如何建项了,但是实际开发中它们之间的关系又是如何呢,如何使用起来呢。
【关系】

View:
拿到需求的第一件事就是会知道界面要做成什么样子,那么第一个创建的就是View。
ViewModel:
主要用来实现业务逻辑的地方,比如需要计算 1 + 1的结果显示到View上。
Model:
这一层主要是用来存放,ViewModel种需要用到的实体类。比如ViewModel业务处理逻辑需要用到的自定义类都可以放到这一层。
【调用】
View:
<Window
x:Class="TestX.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:TestX"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
Title="MainWindow"
Width="800"
Height="800"
Opacity="1"
mc:Ignorable="d">
<Grid>
<ListBox ItemsSource="{Binding NameCollection}"></ListBox>
</Grid>
</Window>
View-Code:
DataContext 一般是用来放view model的,因为你要绑定或操作的对象都在view model里。当然也能存放其它类型的对象。
namespace TestX
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new MainViewModel();
}
}
}
ViewModel:
using GalaSoft.MvvmLight;
using System.Collections.ObjectModel;
using TestX.Models; namespace TestX.ViewModels
{
public class MainViewModel : ViewModelBase
{
private ObservableCollection<MainModel> _nameCollection; public ObservableCollection<MainModel> NameCollection
{
get
{
return _nameCollection;
} set
{
_nameCollection = value;
}
} /// <summary>
/// Initializes a new instance of the MainViewModel class.
/// </summary>
public MainViewModel()
{
Do();
} private void Do() {
NameCollection = new ObservableCollection<MainModel>();
NameCollection.Add(new MainModel() { Name = "张三" });
NameCollection.Add(new MainModel() { Name = "李四" });
NameCollection.Add(new MainModel() { Name = "王五" });
}
}
}
Model:
public class MainModel
{
public string Name { get; set; } public override string ToString()
{
return Name;
}
}
最终效果:

WPF新手快速入门系列 3.MVVM的更多相关文章
- WPF新手快速入门系列 1.布局
[概要] 该系列文章主要描述,新手如何快速上手做wpf开发.看过网上部分的教程,主要讲述的是介绍控件.这并没有问题,但是没有把自己的使用经验也完整的描述出来. 所以特此编写此系列文章希望能帮助到,因为 ...
- WPF新手快速入门系列 2.绑定
[概要] 上一章讲了布局,按照市面上的书籍每一本讲的顺序都不一样,本系列是希望大家能快速上手去应对工作需要,所以本章就直接开始讲绑定. 如有学习过程中想交流学习.疑惑解答可以来此QQ群交流:58074 ...
- WPF快速入门系列(8)——MVVM快速入门
一.引言 在前面介绍了WPF一些核心的内容,其中包括WPF布局.依赖属性.路由事件.绑定.命令.资源样式和模板.然而,在WPF还衍生出了一种很好的编程框架,即WVVM,在Web端开发有MVC,在WPF ...
- .Net5 WPF快速入门系列教程
一.概要 在工作中大家会遇到需要学习新的技术或者临时被抽调到新的项目当中进行开发.通常这样的情况比较紧急没有那么多的时间去看书学习.所以这里向wpf技术栈的开发者分享一套wpf教程,基于.net5框架 ...
- WPF快速入门系列(4)——深入解析WPF绑定
一.引言 WPF绑定使得原本需要多行代码实现的功能,现在只需要简单的XAML代码就可以完成之前多行后台代码实现的功能.WPF绑定可以理解为一种关系,该关系告诉WPF从一个源对象提取一些信息,并将这些信 ...
- WPF快速入门系列(1)——WPF布局概览
一.引言 关于WPF早在一年前就已经看过<深入浅出WPF>这本书,当时看完之后由于没有做笔记,以至于我现在又重新捡起来并记录下学习的过程,本系列将是一个WPF快速入门系列,主要介绍WPF中 ...
- 快速入门系列--WebAPI--03框架你值得拥有
接下来进入的是俺在ASP.NET学习中最重要的WebAPI部分,在现在流行的互联网场景下,WebAPI可以和HTML5.单页应用程序SPA等技术和理念很好的结合在一起.所谓ASP.NET WebAPI ...
- WPF开发快速入门【7】WPF的拖放功能(Drag and Drop)
概述 本文描述WPF的拖放功能(Drag and Drop). 拖放功能涉及到两个功能,一个就是拖,一个是放.拖放可以发生在两个控件之间,也可以在一个控件自己内部拖放.假设界面上有两个控件,一个Tre ...
- GitHub新手快速入门日常操作流程
GitHub新手快速入门日常操作流程 1. 注册帐号 打开https://github.com/,填写注册信息并提交. 2. 登录帐号 打开https://github.com/login,输入注册的 ...
随机推荐
- 唯一约束 UNIQUE KEY
目录 什么是唯一约束 与主键的区别 创建唯一约束 唯一性验证 什么是唯一约束 Unique Key:它是 MySQL 中的唯一约束,是指在所有记录中字段的值不能重复出现.例如,为 id 字段加上唯一性 ...
- Servlet容器启动过程
参考:https://blog.csdn.net/fredaq/article/details/9366043 一.概念 所谓Servlet容器其实说白了是符合Servlet规范的Java web容器 ...
- 开源后端数据校验插件Validate.Net,类似Validate.js
介绍 Validate.Net将Validate.js移植到.Net平台,可以更方便.更快捷的校验实体内属性值是否合法.内置多种常规数据校验规则(校验必填.校验字符串长度区间.校验最大最小值.校验值区 ...
- 【NOI2005】聪聪与可可 题解(最短路+期望DP)
前言:学长讲的太神了:自己还能推出来DP式子,挺开心. -------------------------- 题目链接 题目大意:给定一张含有$n$个结点$m$条边的无向连通图.现在聪聪在点$s$,可 ...
- Centos8最小化部署安装OpenStack Ussuri
#!/bin/bash #Centos8最小化部署安装OpenStack Ussuri #共两台主机,分别是一台控制节点,一台计算节点 #.控制节点内存4096M.双网卡,分别为eth0:10.0.0 ...
- 精讲RestTemplate第3篇-GET请求使用方法详解
本文是精讲RestTemplate第3篇,前篇的blog访问地址如下: 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用 精讲RestTemplate第2篇-多种底层H ...
- 用 Python 制作一个艺术签名小工具,给自己设计一个优雅的签名
生活中有很多场景都需要我们签字(签名),如果是一些不重要的场景,我们的签名好坏基本无所谓了,但如果是一些比较重要的场景,如果我们的签名比较差的话,就有可能给别人留下不太好的印象了,俗话说字如其人嘛,本 ...
- 《RabbitMQ》如何保证消息不被重复消费
一 重复消息 为什么会出现消息重复?消息重复的原因有两个:1.生产时消息重复,2.消费时消息重复. 1.1 生产时消息重复 由于生产者发送消息给MQ,在MQ确认的时候出现了网络波动,生产者没有收到确认 ...
- java_字节流、字符流的使用方法
字节流 字节输出流[OutputStream] java.io.OutputStream 抽象类是表示字节输出流的所有类的超类,将指定的字节信息写出到目的地.它定义了字节输出流的基本共性功能方法. p ...
- 2020重新出发,JAVA学前了解,DOS常用命令
什么是 DOS ? DOS(Disk Operating System)是一个使用得十分广泛的磁盘操作系统. 常见的DOS有两种:IBM公司的PC-DOS ** 和 微软公司的MS-DOS,它们的功能 ...