0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用MVVM框架实现一个简单加法器

CHANBAEK 来源:EEMaker电子创客营 作者: DK45王 2023-10-24 14:23 次阅读

使用MVVM框架来实现一个简单加法器。最终效果如下,点击按钮可以对上面两个文本框中的数字进行相加得出结果显示在第三个文本框中。重点在于看mvvm框架下程序该怎么写。使用CommunityToolkit.Mvvm框架,通过nuget进行安装。

图片

整个工程结构

图片

CalcModel.cs

该文件中存放数据类,类中定了三个属性Input1、Input2、Result。分别代表输入1、输入2和计算结果。和一般的属性不同,该Model属性为了实现属性变化可以进行通知和一般的属性有些区别。

  • 类要继承自ObservableObject
  • 属性set要调用SetProperty方法。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CommunityToolkit.Mvvm;
using CommunityToolkit.Mvvm.ComponentModel;


namespace WpfApp15.Model
{
    public class CalcModel:ObservableObject
    {
        int input1 = 0;
        public int Input1
        {
            get = > input1;
            set
            {
                SetProperty(ref input1, value);
            }
        }


        int input2 = 0;
        public int Input2
        {
            get = > input2;
            set
            {
                SetProperty(ref input2, value);
            }
        }


        int result = 0;
        public int Result
        {
            get = > result;
            set
            {
                SetProperty(ref result, value);
            }
        }
    }
}

MyViewModel.cs

这个部分是业务核心内容,连接View和Model之间的桥梁。因为我们底层的Model已经具备了属性通知的功能,所以在这个层次里面不需要再次封装。有可能我们Model来自于别人写好的不能修改还要支持属性通知,那就要在这里进行再次封装才能和View进行绑定。

该层实现了一个命令CmdCalc,可以和View层绑定进行加法的计算。借用Mvvm框架实现命令很简单:

  • 定义一个ICommand接口的属性CmdCalc
  • 在类构造函数中创建一个RelayCommand的实例赋值给CmdCalc
  • RelayCommand的参数Calc方法中实现了具体的计算
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
using CommunityToolkit.Mvvm;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using WpfApp15.Model;


namespace WpfApp15.ViewModel
{
    public class MyViewModel
    {


        public CalcModel Model { get; set; }
        public ICommand CmdCalc { get;}


        private void Calc()
        {
            Model.Result=Model.Input1+Model.Input2;
        }


        public MyViewModel() 
        {
            Model=new CalcModel();
            CmdCalc = new RelayCommand(Calc);
        }


    }
}

MainWindow.xaml

这个就是View层,负责界面的显示。这里面重点的也就是三个TextBox和一个Button。三个TextBox分别绑定了Model的三个属性。Button绑定了CmdCalc命令,命令可以在按钮点击的时候被触发,替代了传统的Click事件。

 Window x:Class="WpfApp15.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:WpfApp15"
  mc:Ignorable="d"
  Title="MainWindow" Height="450" Width="800" >
   StackPanel >
     Grid >
       Grid.ColumnDefinitions >
         ColumnDefinition ><  /ColumnDefinition >
         ColumnDefinition ><  /ColumnDefinition >
       /Grid.ColumnDefinitions >
       TextBox Text="{Binding Model.Input1}" Grid.Row="0" Grid.Column="0" Height="30" Margin="10"/ >
       TextBox Text="{Binding Model.Input2}" Grid.Row="0" Grid.Column="1" Height="30" Margin="10"/ >
     /Grid >
     TextBox Text="{Binding Model.Result,Mode=TwoWay}" Grid.Row="0" Grid.Column="1" Height="30" Margin="10"/ >
     Button Command="{Binding CmdCalc}" Height="40" Width="200"  Margin="10"/ >
   /StackPanel >
 /Window >

还有一步

目前还不能工作,还要在主窗口的构造函数中设置下DataContext,这样View层的绑定才知道去哪里寻找Model.Input1``Model.Input2``Model.Result``CmdCalc这些属性和命令。

public partial class MainWindow : Window
{
    public MyViewModel vm=new MyViewModel();
    public MainWindow()
    {
        InitializeComponent();
        this.DataContext = vm;
    }
}

到此为止

这样一个简单的例子就展示了MVVM的整体一个基本结构。把数据、界面、业务逻辑给分开在不同的层次中,使开发更加清晰,维护更加方便。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 加法器
    +关注

    关注

    6

    文章

    183

    浏览量

    30054
  • 程序
    +关注

    关注

    116

    文章

    3754

    浏览量

    80735
  • 函数
    +关注

    关注

    3

    文章

    4276

    浏览量

    62314
  • 命令
    +关注

    关注

    5

    文章

    675

    浏览量

    21962
收藏 人收藏

    评论

    相关推荐

    运算放大器的同相加法器和反相加法器

      运算放大器构成加法器 可以分为同相加法器和反相加法器
    发表于 08-05 17:17 3w次阅读
    运算放大器的同相<b class='flag-5'>加法器</b>和反相<b class='flag-5'>加法器</b>

    加法器

    请问下大家,,进位选择加法器和进位跳跃加法器的区别是啥啊?我用Verilog实现16位他们的加法器有什么样的不同啊?还请知道的大神告诉我
    发表于 10-20 20:23

    什么是加法器加法器的原理是什么 ?

    什么是加法器加法器的原理是什么 反相加法器等效原理图解析
    发表于 03-11 06:30

    加法器,加法器是什么意思

    加法器,加法器是什么意思 加法器 :  加法器是为了实现加法的。  即是产生数的和的装置。加数
    发表于 03-08 16:48 5479次阅读

    十进制加法器,十进制加法器工作原理是什么?

    十进制加法器,十进制加法器工作原理是什么?   十进制加法器可由BCD码(二-十进制码)来设计,它可以在二进制加法器的基础上加上适当的“校正”逻辑来
    发表于 04-13 10:58 1.4w次阅读

    FPU加法器的设计与实现

    浮点运算器的核心运算部件是浮点加法器,它是实现浮点指令各种运算的基础,其设计优化对于提高浮点运算的速度和精度相当关键。文章从浮点加法器算法和电路实现的角度给出设计
    发表于 07-06 15:05 47次下载
    FPU<b class='flag-5'>加法器</b>的设计与<b class='flag-5'>实现</b>

    同相加法器电路原理与同相加法器计算

    同相加法器输入阻抗高,输出阻抗低 反相加法器输入阻抗低,输出阻抗高.加法器种数位电路,其可进行数字的加法计算。当选用同相
    发表于 09-13 17:23 5.7w次阅读
    同相<b class='flag-5'>加法器</b>电路原理与同相<b class='flag-5'>加法器</b>计算

    怎么设计32位超前进位加法器

    ,影响整个CPU的性能,为了减小这种延迟,遂采用超前进位加法器(也叫先行进位加法器),下面来介绍下设计的原理。
    发表于 07-09 10:42 2.1w次阅读
    怎么设计<b class='flag-5'>一</b><b class='flag-5'>个</b>32位超前进位<b class='flag-5'>加法器</b>?

    加法器是如何实现

     verilog实现加法器,从底层的门级电路级到行为级,本文对其做出了相应的阐述。
    发表于 02-18 14:53 6188次阅读
    <b class='flag-5'>加法器</b>是如何<b class='flag-5'>实现</b>的

    超前进位加法器是如何实现记忆的呢

    行波进位加法器和超前进位加法器都是加法器,都是在逻辑电路中用作两个数相加的电路。我们再来回顾下行波进位加法器
    发表于 08-05 16:45 1411次阅读
    超前进位<b class='flag-5'>加法器</b>是如何<b class='flag-5'>实现</b>记忆的呢

    加法器的原理及采用加法器的原因

    有关加法器的知识,加法器是用来做什么的,故名思义,加法器是为了实现加法的,它是种产生数的和的装
    的头像 发表于 06-09 18:04 4999次阅读

    镜像加法器的电路结构及仿真设计

    镜像加法器经过改进的加法器电路,首先,它取消了进位反相门;
    的头像 发表于 07-07 14:20 2380次阅读
    镜像<b class='flag-5'>加法器</b>的电路结构及仿真设计

    基于FPGA实现Mem加法器

    前段时间和几个人闲谈,看看在FPGA里面实现Mem加法器怎么玩儿
    的头像 发表于 10-17 10:22 555次阅读
    基于FPGA<b class='flag-5'>实现</b>Mem<b class='flag-5'>加法器</b>

    加法器的原理是什么 加法器有什么作用

    加法器是数字电路中的基本组件之,用于执行数值的加法运算。加法器的基本原理和作用可以从以下几个方面进行详细阐述。
    的头像 发表于 05-23 15:01 2245次阅读
    <b class='flag-5'>加法器</b>的原理是什么 <b class='flag-5'>加法器</b>有什么作用

    串行加法器和并行加法器的区别?

    串行加法器和并行加法器是两种基本的数字电路设计,用于执行二进制数的加法运算。它们在设计哲学、性能特点以及应用场景上有着明显的区别。
    的头像 发表于 05-23 15:06 1950次阅读