WPF 项目中 MVVM模式 的简单例子说明

这篇具有很好参考价值的文章主要介绍了WPF 项目中 MVVM模式 的简单例子说明。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、概述

MVVM 是 Model view viewModel 的简写。MVVM模式有助于将应用程序的业务和表示逻辑与用户界面清晰分离。

WPF 项目中 MVVM模式 的简单例子说明,WPF,wpf

几个概念的说明:

  1. model :数据,界面中需要的数据,最好不要加逻辑代码
  2. view : 视图就是用户看到的UI结构 xaml 文件
  3. viewModel : 业务逻辑代码
  4. 绑定器:声明性数据和命令绑定隐含在MVVM模式中。

使用MVVM模式并不会减少代码量,反而会增加很多代码。MVVM设计模式的根本目的是把界面和业务逻辑分离。
WPF的依赖属性,数据绑定等机制,很好地帮助我们实现MVVM模式,基本可以做到在界面层不出现业务逻辑代码。

WPF 项目中 MVVM模式 的简单例子说明,WPF,wpf

二、mvvm 的实现

首先,新建 views models viewModels文件夹,用于存放不同模型

以简单的加法操作为例。

因为使用mvvm模式后,数据都是c#后端代码提供,前端使用后端的数据,只能通过值绑定的方式,同时如果后端业务逻辑导致数据改动,那么就需要后端去将这一改动通知到前端去。

  1. 前端绑定值,通过 {Binding 数据名} 的方式去绑定。
  2. 前端绑定事件的话,需要在viewModel层实现 Icommand 接口,以提供命令绑定事件 ,前端通过 {Binding 数据名}
  3. 后端通知前端数据修改,则需要实现一个 INotifyPropertyChanged 的接口,通过该接口中的 PropertyChangedEventArgs(“监听的业务操作名称”)去通知给前端。

(一)Command类 实现命令接口

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;

namespace WpfMvvM
{
    public class Command : ICommand
    {
        public event EventHandler CanExecuteChanged;

        public bool CanExecute(object parameter)
        {
            return true;
        }

        public void Execute(object parameter)
        {
            DoExecute?.Invoke();
        }


        public Action DoExecute { get; set; }
    }
}

(二)model层

model层即数据层,

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WpfMvvM.Models
{
    public class AddModule:INotifyPropertyChanged  // 实现INotifyPropertyChanged接口
    {
        public event PropertyChangedEventHandler PropertyChanged;
        
        public int Num1 { get; set; } = 10;
        public int Num2 { get; set; } = 20;
       
        private int _Rs;

        public int Rs
        {
            get { return _Rs; }
            set { 
                _Rs = value;
                // 事件委托通知  new PropertyChangedEventArgs("xx") xx为数据属性名
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Rs"));
            }
        }


        public Command BtnCommand { get; set; } // 命令属性

        
    }
}

(三)ViewModel 层

viewModel层,用来进行业务处理,操控model层的数据,将model层注入为其属性

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using WpfMvvM.Models;

namespace WpfMvvM.ViewModels
{
    public class AddViewModel
    {
        // model 层数据注入
        public AddModule Model { get; set; } = new AddModule();
      
    	// 空构造器,为model层绑定命令及事件通知
        public AddViewModel()
        {
            Model.BtnCommand = new Command();
            Model.BtnCommand.DoExecute=new Action(Add);
        }

        // 业务逻辑方法  加法
        private void Add()
        {
            Model.Rs = Model.Num1 + Model.Num2;
        }

    }
}

(四)view 层

  1. view层 xaml部分
<Window.Resources>
  <Style TargetType="TextBlock">
    <Setter Property="HorizontalAlignment" Value="Center"/>
    <Setter Property="VerticalAlignment" Value="Center"/>
    <Setter Property="FontSize" Value="33"/>
  </Style>
  <Style TargetType="TextBox">
    <Setter Property="HorizontalAlignment" Value="Center"/>
    <Setter Property="VerticalAlignment" Value="Center"/>
    <Setter Property="FontSize" Value="33"/>
    <Setter Property="Width" Value="300"/>
  </Style>
  <Style TargetType="Button">
    <Setter Property="HorizontalAlignment" Value="Center"/>
    <Setter Property="VerticalAlignment" Value="Center"/>
    <Setter Property="FontSize" Value="33"/>
  </Style>
</Window.Resources>
<Grid ShowGridLines="True">
  <Grid.RowDefinitions>
    <RowDefinition/>
    <RowDefinition/>
    <RowDefinition/>
    <RowDefinition/>
  </Grid.RowDefinitions>

  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="1*"/>
    <ColumnDefinition Width="2*"/>
  </Grid.ColumnDefinitions>

  <TextBlock Text="数字1" Grid.Row="0" Grid.Column="0"/>
  <TextBlock Text="数字2" Grid.Row="1" Grid.Column="0"/>
  <TextBlock Text="操作" Grid.Row="2" Grid.Column="0"/>
  <TextBlock Text="结果" Grid.Row="3" Grid.Column="0"/>

  <TextBox Text="{Binding Model.Num1}"  Grid.Row="0" Grid.Column="1"/>
  <TextBox Text="{Binding Model.Num2}"  Grid.Row="1" Grid.Column="1"/>
  <Button Content="加法"  Command="{Binding Model.BtnCommand}" Grid.Row="2" Grid.Column="1" Width="300"/>
  <TextBox Text="{Binding Model.Rs}" Grid.Row="3" Grid.Column="1"/>

</Grid>
  1. view层 cs部分
namespace WpfMvvM.views
{
    /// <summary>
    /// AddView.xaml 的交互逻辑
    /// </summary>
    public partial class AddView : Window
    {
        public AddView()
        {
            InitializeComponent();
            // 设置当前窗体的数据上下文 为 AddViewModel 模型
            this.DataContext = new AddViewModel();
        }
    }
}

view层的Cs代码部分几乎为空,只写了当前的数据上下文环境为 ViewModel 模型。

点击按钮后触发,同时结果数据进行更新

WPF 项目中 MVVM模式 的简单例子说明,WPF,wpf文章来源地址https://www.toymoban.com/news/detail-665659.html

到了这里,关于WPF 项目中 MVVM模式 的简单例子说明的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • WPF入门到精通:3.MVVM简单应用及全局异常处理

    在WPF应用程序开发中,MVVM(Model-View-ViewModel)是一种非常流行的架构模式。它为应用程序的设计提供了良好的分层结构和可扩展性。 结构分为下列三部分 Model:定义了应用程序的数据模型 就是系统中的对象,可包含属性和行为(是一个class实体,是对现实中事物的抽象,开

    2024年02月11日
    浏览(36)
  • WPF ListView MVVM模式下数据增加自动滚动到底部

    ListView 设置SelectedIndex属性不会滚动界面,只能通过ScrollIntoView方法设置,所以使用触发器检测 SelectedIndex ,使用扩展属性定义SelectedIndex的行为 手动引入 System.Windows.Interactivity Microsoft.Expression.Interactions xmal中添加声明

    2024年02月14日
    浏览(38)
  • WPF入门教程系列二十八 ——DataGrid使用示例MVVM模式(5)

    WPF入门教程系列目录 WPF入门教程系列二——Application介绍 WPF入门教程系列三——Application介绍(续) WPF入门教程系列四——Dispatcher介绍 WPF入门教程系列五——Window 介绍 WPF入门教程系列十一——依赖属性(一) WPF入门教程系列十五——WPF中的数据绑定(一)           通过上面

    2024年02月08日
    浏览(35)
  • WPF入门教程系列二十七 ——DataGrid使用示例MVVM模式(4)

    WPF入门教程系列目录 WPF入门教程系列二——Application介绍 WPF入门教程系列三——Application介绍(续) WPF入门教程系列四——Dispatcher介绍 WPF入门教程系列五——Window 介绍 WPF入门教程系列十一——依赖属性(一) WPF入门教程系列十五——WPF中的数据绑定(一)       计算机界的顶

    2024年02月07日
    浏览(40)
  • WPF入门教程系列二十九 ——DataGrid使用示例MVVM模式(7)

    WPF入门教程系列目录 WPF入门教程系列二——Application介绍 WPF入门教程系列三——Application介绍(续) WPF入门教程系列四——Dispatcher介绍 WPF入门教程系列五——Window 介绍 WPF入门教程系列十一——依赖属性(一) WPF入门教程系列十五——WPF中的数据绑定(一)   接上文 WPF入门教程

    2024年02月10日
    浏览(46)
  • WPF入门教程系列二十八 ——DataGrid使用示例MVVM模式(6)

    WPF入门教程系列目录 WPF入门教程系列二——Application介绍 WPF入门教程系列三——Application介绍(续) WPF入门教程系列四——Dispatcher介绍 WPF入门教程系列五——Window 介绍 WPF入门教程系列十一——依赖属性(一) WPF入门教程系列十五——WPF中的数据绑定(一)       7.上面Buttom的

    2024年02月09日
    浏览(39)
  • WPF【二】基于MVVM模式,通过点击按钮(RadioButton)实现主页面显示不同的UserControl

    效果图 一、UI界面的按钮绑定对应的命令【Command】以及命令参数【CommandParameter】 二、 UI【代码】通过内容去绑定需要显示的UserControl页 三、 编写对应的ViewModel.cs文件实现对应的功能,注意:代码中SecondWindow以及FirstPageView两个类是需要用户鼠标右键点击添加【新建项目】选

    2024年02月05日
    浏览(49)
  • 工控视觉项目桌面端WPF源码,UI源码,已实现前后端MVVM数据绑定

    工控视觉项目桌面端WPF源码,UI源码,已实现前后端MVVM数据绑定。 除了两个柱状图用的第三方开源控件,其他都是原生自己写的,非常适合初学者熟悉语法、事件、触发器、MVVM 机制、布局容器,方便二次开发和修改 工控视觉项目桌面端WPF源码,UI源码,已实现前后端MVVM数据

    2024年02月20日
    浏览(45)
  • WPF Prism MVVM技巧【用注入方式在不同项目中访问主窗体(MainWindow)】

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目的是想在Prism MVVM中通过注入的方式来全局访问主窗体(MainWindow)。 创建一个Prism Full App(WPF)项目,在Services项目文件夹中创建一个Public_Global项目并创建一个Global.cs类用来注入。 Dongming_BigTest.App.xmal.c

    2024年02月05日
    浏览(42)
  • WPF入门实例 WPF完整例子 WPF DEMO WPF学习完整例子 WPF实战例子 WPF sql实例应用 WPF资料源码

    WPF 和 WinForms 都是用于创建 Windows 桌面应用程序的开发框架,它们有一些相似之处,但也有很多不同之处。 在开发速度方面,这取决于具体情况。如果您熟悉 WinForms 开发并且正在开发简单的界面应用程序,则可能会比使用 WPF 更快速地完成任务。然而,在设计和实现复杂的用

    2024年02月06日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包