wpf - WPF中计算器的MVVM代码

标签 wpf mvvm calculator

我在 wpf 中为一个简单的计算器编写了代码。

我的 MainWindow.Xaml 代码是..

    <Window x:Class="CalculatorNew.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
    <Grid ContextMenuClosing="Multi">
    <TextBox x:Name="TextBox1" HorizontalAlignment="Left" Height="23" Margin="216,23,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120" RenderTransformOrigin="0.679,0.552"/>
    <TextBox x:Name="TextBox2" HorizontalAlignment="Left" Height="23" Margin="216,76,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120" RenderTransformOrigin="0.679,0.552"/>
    <TextBox x:Name="TextBox3" HorizontalAlignment="Left" Height="23" Margin="216,121,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120" RenderTransformOrigin="0.679,0.552"/>
    <TextBlock HorizontalAlignment="Left" Margin="68,30,0,0" TextWrapping="Wrap" Text="First Number" VerticalAlignment="Top" RenderTransformOrigin="1.137,1.259" Height="16" Width="80"/>
    <TextBlock HorizontalAlignment="Left" Margin="68,128,0,0" TextWrapping="Wrap" VerticalAlignment="Top" RenderTransformOrigin="1.137,1.259" Height="16" Width="80" Text="Result"/>
    <TextBlock HorizontalAlignment="Left" Margin="68,83,0,0" TextWrapping="Wrap" VerticalAlignment="Top" RenderTransformOrigin="1.137,1.259" Height="16" Width="99" Text="Second Number"/>
    <Button Content="+" HorizontalAlignment="Left" Margin="73,172,0,0" VerticalAlignment="Top" Width="75" Click="Add"/>
    <Button Content="-" HorizontalAlignment="Left" Margin="179,172,0,0" VerticalAlignment="Top" Width="75" Click="Sub"/>
    <Button Content="*" HorizontalAlignment="Left" Margin="286,172,0,0" VerticalAlignment="Top" Width="75" Click="Multi"/>
    <Button Content="/" HorizontalAlignment="Left" Margin="392,172,0,0" VerticalAlignment="Top" Width="75" Click="Div"/>

    </Grid>

我的 MainWindowdow.Xaml.cs 代码是..
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace CalculatorNew
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }





    private void Add(object sender, RoutedEventArgs e)
    {
        TextBox3.Text = (System.Convert.ToDecimal(TextBox1.Text) + System.Convert.ToDecimal(TextBox2.Text)).ToString();
    }

    private void Sub(object sender, RoutedEventArgs e)
    {
        TextBox3.Text = (System.Convert.ToDecimal(TextBox1.Text) - System.Convert.ToDecimal(TextBox2.Text)).ToString();
    }



    private void Div(object sender, RoutedEventArgs e)
    {
        TextBox3.Text = (System.Convert.ToDecimal(TextBox1.Text) / System.Convert.ToDecimal(TextBox2.Text)).ToString();
    }

    private void Multi(object sender, RoutedEventArgs e)
    {
        TextBox3.Text = (System.Convert.ToDecimal(TextBox1.Text) * System.Convert.ToDecimal(TextBox2.Text)).ToString();
    }    

}   

}

我是 WPF 和 MVVM 的新手。所以我发现以 MVVM 格式编写它有点困难。

有人能告诉我如何以 MVVM 格式重写它,以便我可以将其用作 future 的引用吗?

最佳答案

我认为您的问题很有可能被关闭,因为它没有表现出您做出努力的最低意愿。请阅读教程,网上有很多,并尝试先理解这些概念。您至少需要了解 ViewModel 是什么,以及 View 如何与它相关(绑定(bind))。

你可能不会在这个网站上得到完全符合你要求的工作代码,我对解释事情是如何工作的更感兴趣。

无论如何,为了得到你想要的,你需要一个作为 ViewModel 的类,它的属性代表你使用的概念。您可以有表示操作数的十进制属性和表示运算符的内容,以及表示 UI 中每个按钮的命令。然后,您需要将 UI 元素(文本框、按钮)链接到 ViewModel 中的属性的绑定(bind),并且您需要将 ViewModel 的实例设置为您感兴趣的 UI 元素的容器的 DataContext(无论是 Window ,网格或其他)。我觉得总结的差不多了。。。

关于wpf - WPF中计算器的MVVM代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18333118/

相关文章:

c# - WPF 在 xaml 代码中创建一种 "variable"以便在其余的 xaml 代码中使用

c# - WPF MVVM 绑定(bind)超链接 RequestNavigate 到 View 模型

JavaScript - 关于数据结构的问题

math - 导数计算器

c - 如何使用 scanf 检测 C 中的运算符与 int?

c# - Awesomium - 返回对象名称

wpf - 编辑标准 WPF Aero 主题

c# - DataGrid 获取选中行的列值

java - MVVM 中的 Activity/Fragment 和 ViewModel 应该做什么

wpf - 如何从另一个窗口使用我的应用程序资源?