在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用MVVM框架實(shí)現(xiàn)一個簡單加法器

CHANBAEK ? 來源:EEMaker電子創(chuàng)客營 ? 作者: DK45王 ? 2023-10-24 14:23 ? 次閱讀

使用MVVM框架來實(shí)現(xiàn)一個簡單加法器。最終效果如下,點(diǎn)擊按鈕可以對上面兩個文本框中的數(shù)字進(jìn)行相加得出結(jié)果顯示在第三個文本框中。重點(diǎn)在于看mvvm框架下程序該怎么寫。使用CommunityToolkit.Mvvm框架,通過nuget進(jìn)行安裝。

圖片

整個工程結(jié)構(gòu)

圖片

CalcModel.cs

該文件中存放數(shù)據(jù)類,類中定了三個屬性Input1、Input2、Result。分別代表輸入1、輸入2和計(jì)算結(jié)果。和一般的屬性不同,該Model屬性為了實(shí)現(xiàn)屬性變化可以進(jìn)行通知和一般的屬性有些區(qū)別。

  • 類要繼承自O(shè)bservableObject
  • 屬性set要調(diào)用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

這個部分是業(yè)務(wù)核心內(nèi)容,連接View和Model之間的橋梁。因?yàn)槲覀兊讓拥腗odel已經(jīng)具備了屬性通知的功能,所以在這個層次里面不需要再次封裝。有可能我們Model來自于別人寫好的不能修改還要支持屬性通知,那就要在這里進(jìn)行再次封裝才能和View進(jìn)行綁定。

該層實(shí)現(xiàn)了一個命令CmdCalc,可以和View層綁定進(jìn)行加法的計(jì)算。借用Mvvm框架實(shí)現(xiàn)命令很簡單:

  • 定義一個ICommand接口的屬性CmdCalc
  • 在類構(gòu)造函數(shù)中創(chuàng)建一個RelayCommand的實(shí)例賦值給CmdCalc
  • RelayCommand的參數(shù)Calc方法中實(shí)現(xiàn)了具體的計(jì)算
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層,負(fù)責(zé)界面的顯示。這里面重點(diǎn)的也就是三個TextBox和一個Button。三個TextBox分別綁定了Model的三個屬性。Button綁定了CmdCalc命令,命令可以在按鈕點(diǎn)擊的時候被觸發(fā),替代了傳統(tǒng)的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 >

還有一步

目前還不能工作,還要在主窗口的構(gòu)造函數(shù)中設(shè)置下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的整體一個基本結(jié)構(gòu)。把數(shù)據(jù)、界面、業(yè)務(wù)邏輯給分開在不同的層次中,使開發(fā)更加清晰,維護(hù)更加方便。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 加法器
    +關(guān)注

    關(guān)注

    6

    文章

    183

    瀏覽量

    30233
  • 程序
    +關(guān)注

    關(guān)注

    117

    文章

    3795

    瀏覽量

    81411
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4346

    瀏覽量

    62973
  • 命令
    +關(guān)注

    關(guān)注

    5

    文章

    696

    瀏覽量

    22111
收藏 人收藏

    評論

    相關(guān)推薦

    運(yùn)算放大器的同相加法器和反相加法器

      運(yùn)算放大器構(gòu)成加法器 可以分為同相加法器和反相加法器
    發(fā)表于 08-05 17:17 ?3.2w次閱讀
    運(yùn)算放大器的同相<b class='flag-5'>加法器</b>和反相<b class='flag-5'>加法器</b>

    加法器

    請問下大家,,進(jìn)位選擇加法器和進(jìn)位跳躍加法器的區(qū)別是啥啊?我用Verilog實(shí)現(xiàn)16位他們的加法器有什么樣的不同啊?還請知道的大神告訴我
    發(fā)表于 10-20 20:23

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

    什么是加法器加法器的原理是什么 反相加法器等效原理圖解析
    發(fā)表于 03-11 06:30

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

    加法器,加法器是什么意思 加法器 :  加法器是為了實(shí)現(xiàn)加法的。  即是產(chǎn)生數(shù)的和的裝置。加數(shù)
    發(fā)表于 03-08 16:48 ?5590次閱讀

    十進(jìn)制加法器,十進(jìn)制加法器工作原理是什么?

    十進(jìn)制加法器,十進(jìn)制加法器工作原理是什么?   十進(jìn)制加法器可由BCD碼(二-十進(jìn)制碼)來設(shè)計(jì),它可以在二進(jìn)制加法器的基礎(chǔ)上加上適當(dāng)?shù)摹靶U边壿媮?/div>
    發(fā)表于 04-13 10:58 ?1.4w次閱讀

    FPU加法器的設(shè)計(jì)與實(shí)現(xiàn)

    浮點(diǎn)運(yùn)算器的核心運(yùn)算部件是浮點(diǎn)加法器,它是實(shí)現(xiàn)浮點(diǎn)指令各種運(yùn)算的基礎(chǔ),其設(shè)計(jì)優(yōu)化對于提高浮點(diǎn)運(yùn)算的速度和精度相當(dāng)關(guān)鍵。文章從浮點(diǎn)加法器算法和電路實(shí)現(xiàn)的角度給出設(shè)計(jì)
    發(fā)表于 07-06 15:05 ?47次下載
    FPU<b class='flag-5'>加法器</b>的設(shè)計(jì)與<b class='flag-5'>實(shí)現(xiàn)</b>

    同相加法器電路原理與同相加法器計(jì)算

    同相加法器輸入阻抗高,輸出阻抗低 反相加法器輸入阻抗低,輸出阻抗高.加法器種數(shù)位電路,其可進(jìn)行數(shù)字的加法計(jì)算。當(dāng)選用同相
    發(fā)表于 09-13 17:23 ?5.8w次閱讀
    同相<b class='flag-5'>加法器</b>電路原理與同相<b class='flag-5'>加法器</b>計(jì)算

    怎么設(shè)計(jì)32位超前進(jìn)位加法器

    ,影響整個CPU的性能,為了減小這種延遲,遂采用超前進(jìn)位加法器(也叫先行進(jìn)位加法器),下面來介紹下設(shè)計(jì)的原理。
    發(fā)表于 07-09 10:42 ?2.1w次閱讀
    怎么設(shè)計(jì)<b class='flag-5'>一</b><b class='flag-5'>個</b>32位超前進(jìn)位<b class='flag-5'>加法器</b>?

    加法器是如何實(shí)現(xiàn)

     verilog實(shí)現(xiàn)加法器,從底層的門級電路級到行為級,本文對其做出了相應(yīng)的闡述。
    發(fā)表于 02-18 14:53 ?6327次閱讀
    <b class='flag-5'>加法器</b>是如何<b class='flag-5'>實(shí)現(xiàn)</b>的

    超前進(jìn)位加法器是如何實(shí)現(xiàn)記憶的呢

    行波進(jìn)位加法器和超前進(jìn)位加法器都是加法器,都是在邏輯電路中用作兩個數(shù)相加的電路。我們再來回顧下行波進(jìn)位加法器
    發(fā)表于 08-05 16:45 ?1640次閱讀
    超前進(jìn)位<b class='flag-5'>加法器</b>是如何<b class='flag-5'>實(shí)現(xiàn)</b>記憶的呢

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

    有關(guān)加法器的知識,加法器是用來做什么的,故名思義,加法器是為了實(shí)現(xiàn)加法的,它是種產(chǎn)生數(shù)的和的裝
    的頭像 發(fā)表于 06-09 18:04 ?5262次閱讀

    鏡像加法器的電路結(jié)構(gòu)及仿真設(shè)計(jì)

    鏡像加法器經(jīng)過改進(jìn)的加法器電路,首先,它取消了進(jìn)位反相門;
    的頭像 發(fā)表于 07-07 14:20 ?3016次閱讀
    鏡像<b class='flag-5'>加法器</b>的電路結(jié)構(gòu)及仿真設(shè)計(jì)

    基于FPGA實(shí)現(xiàn)Mem加法器

    前段時間和幾個人閑談,看看在FPGA里面實(shí)現(xiàn)Mem加法器怎么玩兒
    的頭像 發(fā)表于 10-17 10:22 ?677次閱讀
    基于FPGA<b class='flag-5'>實(shí)現(xiàn)</b>Mem<b class='flag-5'>加法器</b>

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

    加法器是數(shù)字電路中的基本組件之,用于執(zhí)行數(shù)值的加法運(yùn)算。加法器的基本原理和作用可以從以下幾個方面進(jìn)行詳細(xì)闡述。
    的頭像 發(fā)表于 05-23 15:01 ?3463次閱讀
    <b class='flag-5'>加法器</b>的原理是什么 <b class='flag-5'>加法器</b>有什么作用

    串行加法器和并行加法器的區(qū)別?

    串行加法器和并行加法器是兩種基本的數(shù)字電路設(shè)計(jì),用于執(zhí)行二進(jìn)制數(shù)的加法運(yùn)算。它們在設(shè)計(jì)哲學(xué)、性能特點(diǎn)以及應(yīng)用場景上有著明顯的區(qū)別。
    的頭像 發(fā)表于 05-23 15:06 ?2889次閱讀
    主站蜘蛛池模板: 97色婷婷成人综合在线观看 | 日本黄色片黄色片 | 色婷婷色| 午夜视频在线观看一区二区 | 久久免费视频网站 | 日本拍拍拍 | 亚洲综人网 | 91男女视频 | 久草资源站在线 | 黄色网址有那些 | 高清一区二区三区免费 | 日本一区二区精品88 | 欧美日韩高清一本大道免费 | 欧美色图中文字幕 | 男人操女人视频免费 | 天天操夜| 依人成人 | 欧洲mv日韩mv国产mv | 久久久久国产精品免费网站 | 轻点灬大ji巴太粗太大了小说 | 亚洲最新在线观看 | 欧美三级在线观看视频 | 色妇视频| 天天操夜夜干 | 美女视频永久黄网站在线观看 | 欧美日韩一区二区不卡 | a天堂在线观看 | 天天操中文字幕 | 欧美人成一本免费观看视频 | 伊人精品在线观看 | 久久成人免费网站 | 久久夜色tv网站免费影院 | 激情五月深爱五月 | 国卡一卡二卡三免费网站 | 欧美满足你的丝袜高跟ol | 欧美成人精品一区二三区在线观看 | 操人视频网站 | 日本三级黄在线观看 | 热re99久久精品国99热 | 午夜三级福利 | 黄字幕网 |