C# WPF 自学 MVVM简单介绍
一、MVVM介绍
MVVM是Model-View-ViewModel(模型-视图-视图模型)的缩写形式

1、View就是用xaml实现的界面,负责与用户交互,接收用户输入,把数据展现给用户。
2、ViewModel是一个C#类,负责收集需要绑定的数据和命令,聚合Model对象,通过View类的DataContext属性绑定到View,同时也可以处理一些UI逻辑。
3、Model,就是系统中的对象,可包含属性和行为。
三者之间的关系:View对应一个ViewModel,ViewModel可以聚合N个Model,ViewModel可以对应多个View
二、MVVM的优势
三权分立。另外,和面向接口编程的思想有点相同;也和 asp.net mvc 有点像。
三、MVVM简单示例
1.项目结构

我个人喜欢先写 Model,再写 ViewModel, 最后在 xaml 里面绑定数据
Model: UserInfo

代码:

using System;
using System.Collections.Generic;
using System.Text; namespace WpfMVVMDemo.Model
{
public class UserInfo
{
private String _Name;
private int _Age;
public string Name { get => _Name; set => _Name = value; }
public int Age { get => _Age; set => _Age = value; }
}
}
UserInfo

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using WpfMVVMDemo.Model; namespace WpfMVVMDemo
{
public class UserInfoViewModel : INotifyPropertyChanged
{
private UserInfo userInfo; public UserInfoViewModel()
{
this.userInfo = new UserInfo() { Name = "张三", Age = 18 };
} public String Name
{
get { return this.userInfo.Name; }
set
{
this.userInfo.Name = value;
RaisePropertyChanged("Name");
}
} public int Age
{
get { return this.userInfo.Age; }
set
{
this.userInfo.Age = value;
RaisePropertyChanged("Age");
}
} public event PropertyChangedEventHandler PropertyChanged; private void RaisePropertyChanged(String propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
} protected virtual void SetAndNotifyIfChanged<T>(String propertyName, ref T oldVal, ref T newVal)
{
if (oldVal == null && newVal == null) return;
if (oldVal != null && oldVal.Equals(newVal)) return;
if (newVal != null && newVal.Equals(oldVal)) return;
oldVal = newVal;
RaisePropertyChanged(propertyName);
} }
}
UserInfoViewModel
在 MainWindow.xaml 中 声明一个 ViewModel,就像 asp.net mvc 从后端把数据传给视图一样。


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes; namespace WpfMVVMDemo
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
UserInfoViewModel viewModel = new UserInfoViewModel();
public MainWindow()
{
InitializeComponent();
this.viewModel = base.DataContext as UserInfoViewModel;
}
}
}
MainWindow.xaml.cs
修改 xaml:


<Window x:Class="WpfMVVMDemo.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:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfMVVMDemo"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Window.DataContext>
<local:UserInfoViewModel></local:UserInfoViewModel>
</Window.DataContext>
<Grid>
<TextBox Text="{Binding Name}" HorizontalAlignment="Left" Margin="176,82,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/>
<Label Content="姓名" HorizontalAlignment="Left" Margin="122,78,0,0" VerticalAlignment="Top"/>
<TextBox Text="{Binding Age}" HorizontalAlignment="Left" Margin="176,112,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/>
<Label Content="年龄" HorizontalAlignment="Left" Margin="122,108,0,0" VerticalAlignment="Top"/> </Grid>
</Window>
MainWindow.xaml
Done!
最近在了解工控方面的编程,发现WPF搞工控开发很好。
QQ:77915862
有兴趣的可以一起交流。
C# WPF 自学 MVVM简单介绍的更多相关文章
- WPF自学入门(十一)WPF MVVM模式Command命令 WPF自学入门(十)WPF MVVM简单介绍
WPF自学入门(十一)WPF MVVM模式Command命令 在WPF自学入门(十)WPF MVVM简单介绍中的示例似乎运行起来没有什么问题,也可以进行更新.但是这并不是我们使用MVVM的正确方式 ...
- WPF自学入门(十)WPF MVVM简单介绍
前面文章中,我们已经知道,WPF技术的主要特点是数据驱动UI,所以在使用WPF技术开发的过程中是以数据为核心的,WPF提供了数据绑定机制,当数据发生变化时,WPF会自动发出通知去更新UI. 我们不管 ...
- WPF MVVM简单介绍
前面文章中,我们已经知道,WPF技术的主要特点是数据驱动UI,所以在使用WPF技术开发的过程中是以数据为核心的,WPF提供了数据绑定机制,当数据发生变化时,WPF会自动发出通知去更新UI. 我们不管 ...
- WPF框架MVVM简单例子
MVVM是Model-View-ViewModel的缩写形式,它通常被用于WPF或Silverlight开发.Model——可以理解为带有字段,属性的类.View——可以理解为我们所看到的UI.Vie ...
- wpf 控件简单介绍
- WPF自学入门(十一)WPF MVVM模式Command命令
在WPF自学入门(十)WPF MVVM简单介绍中的示例似乎运行起来没有什么问题,也可以进行更新.但是这并不是我们使用MVVM的正确方式.正如上一篇文章中在开始说的,MVVM的目的是为了最大限度地降低了 ...
- WPF自学入门(六)WPF带标题的内容控件简单介绍
在WPF自学入门(二)WPF-XAML布局控件的文章中分别介绍StackPanel,WarpPanel,DockPanel,Grid,Canvas五种布局容器的使用,可以让我们大致了解容器可以使用在什 ...
- 从0到1:使用Caliburn.Micro(WPF和MVVM)开发简单的计算器
从0到1:使用Caliburn.Micro(WPF和MVVM)开发简单的计算器 之前时间一直在使用Caliburn.Micro这种应用了MVVM模式的WPF框架做开发,是时候总结一下了. Calibu ...
- WPF自学入门(十二)WPF MVVM模式提取函数
我们平时在写代码时为了不重复写代码,会进行复制代码或者写通用方法.今天我们就来把上传做的函数提取成为通用的方法调用.把上次写的函数提取为两个主要的文件:ObserableObject和RelayCom ...
- Android开发自学笔记(Android Studio)—4.界面编程与View组件简单介绍
一.引言 Android应用开发最重要的一份内容就是界面的开发,无论你程序包含的内容多么优秀,如若没有一个良好的用户交互界面,最终也只是会被用户所遗弃.Android SDK提供了大量功能丰富的UI组 ...
随机推荐
- Chrome浏览器提示您的连接不是私密连接解决办法
解决方案: 是在当前页面用键盘输入 thisisunsafe ,不是在地址栏输入,就直接敲键盘就行了,页面即会自动刷新进入网页. 原因: 因为Chrome不信任这些自签名ssl证书,为了安全起见,直接 ...
- supervisord and pm2 进程守护工具
目录 安装 pm2 config pm2是一个带有负载均衡功能的应用进程管理器,类似有Supervisor,forever supervisor 特点: 代码修改,实时重启 安装 npm instal ...
- 深度剖析生产工厂用ERP系统进行管理有哪些优势
对于生产制造企业而言,生产现场管理永远是其得以健康发展的重要环节.现场是产品开发和生产的场所,企业要降低成本.按期交付产品,以及产品质量要达到客户所期望的要求和水平,这一切都要在现场实现,企业也正是从 ...
- 【PS】PS如何删除图片中的白字
[PS]PS如何删除图片中的白字 首先打开ps,然后导入要操作的图片,接着选择左边工具栏中的魔棒工具. 对所要操作的文字进行框选,可以按住shift键进行连续操作 点击上方工具栏中的选择 | 修改 | ...
- django 关联类 DoesNotExist: User matching query does not exist.
问题就是 关联类为空找不到 在或者geattr / hasattr / obj. item 会抛出异常 无法通过判断处理 捕获异常 try: tmp_data['demand_dept_name'] ...
- js函数参数默认值
以前的写法,利用短路原则来写: function haosy(name,age){ name=name||'小郝'; age=age||21; alert('读者你好,我是作者'+name+',芳龄' ...
- nignx 代理前端服务
说明:研发给了一个前端包,需要进行代理访问 前端包名:web 一.部署nginx服务 略 二.配置代理 2.1 将前端包放置任意目录,如/home/manage 2.2 修改nginx配置 [root ...
- macOS NSScrollView简单使用
先看图片 这里是NSScrollView配合其他控件使用,我们这里只讲NSScrollView. 复制以下代码即可以运行 @interface ViewControl () /** 滚动显示 */ @ ...
- Linux FTP服务器配置文件vsftpd.conf 配置
配置文件/etc/vsftpd/vsftpd.conf local_enable=YES write_enable=YESlocal_umask=022dirmessage_en ...
- office365启动突然提示注册表错误,无法打开“规则”配置的解决方案
感觉目前网上的资料,暂无清晰的解答,根据现象分析是outlook的原始邮件文件即psd文件中的规则相关字段存在问题,导致outlook无法打开. 因此网上的各种答疑如重装,调整注册表等等措施都是无效的 ...