当前位置: 首页 > news >正文

WPF-MVVM的简单入门(第一个MVVM程序)

来自群友毕方的投稿,给大家做一个MVVM的体验demo

1.MVVM 是什么?

MVVM是一种设计模式,核心思想是实现将界面(View)与 逻辑(ViewModel)彻底分开,实现前后端分离

2.MVVM的三大元素

一、Model (模型)数据类 ,例如一个 User类 有Name、Age属性

二、View (视图,窗口,页面)用户能看到的界面 UI

三、ViewModel (视图模型)处理View上用户的操作,如点击按钮,输入数字 ,实现Mode与View的双向更新

3.下面带大家实现一个最简单的MVVM项目
1.打开Vs2022 创建一个WPF项目

0

a、把原来的MainWindow.xaml删掉
b、然后添加分别三个文件夹(Models、ViewModels、Views)
c、在Views文件夹中添加窗口(WPF),命名MainWindow,如下图

在App.xaml中修改StartupUri为

StartupUri="Views/MainWindow.xaml",如图

2.设计界面
实现效果:按下按钮后,展示姓名和年龄到输入框

界面代码如下

<Window x:Class="第一个MVVM程序.Views.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:第一个MVVM程序.Views"mc:Ignorable="d"Title="MainWindow" Height="220" Width="350"><Grid><Grid.RowDefinitions><RowDefinition Height="auto" /><RowDefinition Height="auto" /><RowDefinition Height="auto" /></Grid.RowDefinitions><StackPanel Orientation="Horizontal"><Label  Width="50"  Height="30"  Content=" 姓名" /><TextBox  x:Name="TexBoxName" Width="100"  Height="20"  Text="{Binding User.Name}" /></StackPanel><StackPanel Grid.Row="1" Orientation="Horizontal"><Label Width="50" Height="30" Content=" 年龄" /><TextBox  x:Name="TexBoxAge"   Width="100"  Height="20" Text="{Binding User.Age}" /></StackPanel><StackPanel Grid.Row="2" Orientation="Horizontal"><Button Width="100"  Height="20"  Margin="20,0"  Click="Button_Click" Content="显示" /></StackPanel></Grid>
</Window>

3.View设计完毕,添加Model与ViewModel类

Model(User.cs)

ViewModel(MainWindowModels,cs)
using System.ComponentModel;
using 第一个MVVM程序.Models;namespace 第一个MVVM程序.ViewModels
{public class MainWindowModel : INotifyPropertyChanged{private User _user = new User();public User User{get => _user;set{_user = value;OnPropertyChanged(nameof(User));}}public event PropertyChangedEventHandler PropertyChanged;protected virtual void OnPropertyChanged(string propertyName){PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));}}
}

4.将View与ViewMode进行绑定

进入MainWindow.xaml.cs

using System.Windows;
using 第一个MVVM程序.Models;
using 第一个MVVM程序.ViewModels;namespace 第一个MVVM程序.Views
{/// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWindow : Window{public MainWindowModel mainWindowModel = new MainWindowModel();  //实例化ViewModepublic MainWindow(){InitializeComponent();this.DataContext = mainWindowModel; //将View 数据上下文绑定到ViewMode}private void Button_Click(object sender, RoutedEventArgs e){mainWindowModel.User = new User { Name = "张三", Age = "18" };//直接操作UI//TexBoxName.Text = "张三";// TexBoxAge.Text = "18";}}
}

5.将UI组件与ViewModel中的属性进行绑定

为按钮添加事件:

这里我还是采用传统Winfrom的方式将事件逻辑写在界面后台,写完以后,将鼠标光标放到Button_Click 这里,点击F12 ,就会自动在界面后台代码,生成一个事件方法

展示:

点击按钮显示

http://www.dtcms.com/a/520123.html

相关文章:

  • blender拓扑建模教程
  • asp.net手机网站开发教程翻译网站建设方案
  • 佛山建设网站公司哪家好特斯拉ceo进厂拧螺丝
  • 如何做新网站保留域名wordpress基础
  • C# 实现 Modbus TCP 通信
  • 《Git:从入门到精通(七)——Git分支管理与协作开发实战》
  • 超越传统工具:利用Reddit发现关键词的独特视角与前沿方法
  • 数据结构——二叉搜索树深度解析
  • macOS 无法在根目录创建目录的原因与解决方案
  • 11.23 鸿蒙HTTP数据请求
  • 郑州网站建设最低价网址导航的意思
  • LOESS回归
  • 跨平台开发中的图形渲染:Canvas与View+CSS的性能分析与决策路径
  • 能源经济选题推荐:可再生能源转型政策如何提高能源韧性?基于双重机器学习的因果推断
  • 《R for Data Science (2e)》免费中文翻译 (第11章) --- Communication(1)
  • 生成式对抗网络 GAN:从零理解生成对抗网络的原理与魅力
  • 李宏毅机器学习笔记30
  • 做塑胶材料的网站深圳网站设计平台
  • 【设计模式】装饰器模式(Decorator)
  • 设计模式之:享元模式
  • android 图像显示框架二——流程分析
  • CentOS 10 系统安装
  • MySQL试验部署
  • 【文献笔记】ICLR 2018 | Graph Attention Networks
  • Day69 SQLite3动态库移植 + BMP图像解析显示 + 进度条控件设计与动态文本管理
  • 通过自构建的时间服务器主机给客户端主机同步时间
  • [特殊字符] 软考架构师 vs. 考研408:全方位对比
  • C语言进阶:(一)深度剖析函数栈帧:从创建到销毁
  • 零基础从头教学Linux(Day 55)
  • 哪里有学做ppt的网站资阳的网站建设