<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
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

    文章

    175

    瀏覽量

    29758
  • 程序
    +關注

    關注

    114

    文章

    3630

    瀏覽量

    79645
  • 函數
    +關注

    關注

    3

    文章

    4042

    瀏覽量

    61390
  • 命令
    +關注

    關注

    5

    文章

    638

    瀏覽量

    21855
收藏 人收藏

    評論

    相關推薦

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

      運算放大器構成加法器 可以分為同相加法器和反相加法器
    發表于 08-05 17:17 ?2.4w次閱讀
    運算放大器的同相<b class='flag-5'>加法器</b>和反相<b class='flag-5'>加法器</b>

    4位加法器級聯構成8位加法器 verilog怎么寫?????!

    小弟是初學者,剛把verilog基本語法看完,只會寫簡單的四位或者八位的加法器,但是兩4位加法器級聯構成
    發表于 12-03 11:51

    有誰懂模加法器的設計嗎

    需要設計加法器,書上沒有詳細的講解,只說是用端回進位加法器實現模2^n-1,可是具體應該怎么設計啊~~~~
    發表于 07-07 14:48

    加法器

    請問下大家,,進位選擇加法器和進位跳躍加法器的區別是啥???我用Verilog實現16位他們的加法器有什么樣的不同???還請知道的大神告訴我
    發表于 10-20 20:23

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

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

    4位并行的BCD加法器電路圖

       圖二所示為4位并行的BCD加法器電路。其中上面加法器的輸入來自低一級的BCD數字。下
    發表于 03-28 16:35 ?1.3w次閱讀
    4位并行的BCD<b class='flag-5'>加法器</b>電路圖

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

    加法器,加法器是什么意思 加法器 :  加法器是為了實現加法的?! 〖词钱a生數的和的裝置。加數
    發表于 03-08 16:48 ?5188次閱讀

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

    十進制加法器,十進制加法器工作原理是什么?   十進制加法器可由BCD碼(二-十進制碼)來設計,它可以在二進制加法器的基礎上加上適當的“校正”邏輯來
    發表于 04-13 10:58 ?1.3w次閱讀

    FPU加法器的設計與實現

    浮點運算器的核心運算部件是浮點加法器,它是實現浮點指令各種運算的基礎,其設計優化對于提高浮點運算的速度和精度相當關鍵。文章從浮點加法器算法和電路實現的角度給出設計
    發表于 07-06 15:05 ?47次下載
    FPU<b class='flag-5'>加法器</b>的設計與<b class='flag-5'>實現</b>

    同相加法器電路原理與同相加法器計算

    同相加法器輸入阻抗高,輸出阻抗低 反相加法器輸入阻抗低,輸出阻抗高.加法器是一種數位電路,其可進行數字的加法計算。當選用同相加法器時,如A輸
    發表于 09-13 17:23 ?5.6w次閱讀
    同相<b class='flag-5'>加法器</b>電路原理與同相<b class='flag-5'>加法器</b>計算

    加法器是如何實現

     verilog實現加法器,從底層的門級電路級到行為級,本文對其做出了相應的闡述。
    發表于 02-18 14:53 ?5798次閱讀
    <b class='flag-5'>加法器</b>是如何<b class='flag-5'>實現</b>的

    加法器設計代碼參考

    介紹各種加法器的Verilog代碼和testbench。
    發表于 05-31 09:23 ?19次下載

    超前進位加法器是如何實現記憶的呢

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

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

    有關加法器的知識,加法器是用來做什么的,故名思義,加法器是為了實現加法的,它是一種產生數的和的裝置,那么
    的頭像 發表于 06-09 18:04 ?3991次閱讀

    加法器的工作原理及電路解析

    加法器是一種執行二進制數相加的數字電路。它是最簡單的數字加法器,您只需使用兩個邏輯門即可構建一個;一個異或門和一個 AND 門。
    的頭像 發表于 06-29 14:35 ?7162次閱讀
    半<b class='flag-5'>加法器</b>的工作原理及電路解析
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>