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

【C#】MVVM架构

示例结果展示

前提了解

MVVM是Model-View-ViewModel的缩写形式,它通常被用于WPF或Silverlight开发。

Model——可以理解为带有字段,属性的类。例如学校类,教师类,学生类等

View——可以理解为我们所看到的UI。前端界面。

View Model在View和Model之间,起到连接的作用,并且使得View和Model层分离。View Model不仅仅是Model的包装,它还包含了程序逻辑,以及Model扩展,例如,如果Model中有一个公开属性不需要在UI上显示,此时我们可以不再View Model中去定义它。

MVVM模式特点

  • 视图的cs文件包括极少的代码(几乎在cs中不写与数据相关的代码),其核心逻辑都被放在View Model类中,从而使得程序逻辑与视图耦合度降低。
  • ViewModel类作为View的DataContext。
  • 在MVVM下,所有的事件和动作都被当成命令,如按钮的点击操作,此时不是触发点击事件,而是绑定到一个点击命令(Command),再由命令去执行对应的逻辑。

代码

文件分布

Command存放如何进行事件执行的命令,RelayCommand。(基本不变,这里只实现了简单的命令执行方法)

DataHelper存放测试数据,或者是从数据库读取到数据

Model用于存放类数据Student类等

View存放前端界面

ViewModel存放View和Model之间处理的事件及方法,属性。

Command

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

namespace MVVMDemo.Commands
{
    public class RelayCommand :ICommand
    {
        #region Fields
        private Action _execute;
        private Func<bool> _canExecute;
        #endregion 

        public RelayCommand(Action execute)
            : this(execute, null)
        { 
        }
        public RelayCommand(Action execute, Func<bool> canExecute)
        {
            if (execute == null)
                throw new ArgumentNullException("execute");
            _execute = execute;
            _canExecute = canExecute;
        }

        #region ICommand Member

        public event EventHandler CanExecuteChanged
        {
            add
            {
                if (_canExecute != null)
                {
                    CommandManager.RequerySuggested += value;

                }
            }
            remove
            {
                if (_canExecute != null)
                {
                    CommandManager.RequerySuggested -= value;

                }
            }

http://www.kler.cn/a/230131.html

相关文章:

  • localStorage缓存 接口 配置
  • python爬虫安装教程
  • 【微服务】Nacos
  • 嵌入式linux系统中图像处理基本方法
  • ISUP协议视频平台EasyCVR萤石设备视频接入平台银行营业网点安全防范系统解决方案
  • JVM-类文件结构
  • 前端常用代码整理(不断更新中)— js,jquery篇
  • H5 简约四色新科技风引导页源码
  • 基于java+springboot+vue实现的仓库管理系统(文末源码+Lw)23-115
  • 详解MYSQL中的平均值组大小
  • VScode上无法运行TSC命令,Typescript
  • Redis持久化、主从与哨兵架构详解
  • 3、生成式 AI 如何帮助您改进数据可视化图表
  • 【开源】SpringBoot框架开发城市桥梁道路管理系统
  • modelsim仿真使用到vivado的IP,该如何使用!
  • LeetCode541. 反转字符串 II
  • C++单例模式详解
  • Pandas常用操作记录(更新中)
  • 74HC154D-LED
  • Swift Combine 从入门到精通一
  • Python数据可视化库之mplfinance使用详解
  • android开发中遇到的问题和注意点
  • 陶哲轩如何用 GPT-4 辅助数学研究
  • 在Python中执行Linux Shell脚本详解
  • BLEUScore AttributeError: ‘list‘ object has no attribute ‘split‘——问题解决
  • LRU缓存