2013-08-20 6 views
0

Я написал код для простого калькулятора в wpf.Код MVVM для калькулятора в 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, чтобы я мог использовать его в качестве справочника на будущее?

+0

Если у вас есть Visual Studio 2010, дайте [MVVM In The Box] (http://karlshifflett.wordpress.com/2010/11/07/in-the-box -ndash-mvvm-training /) посмотреть, это действительно хороший способ узнать MVVM. – JMK

ответ

1

Этот пример можно использовать в качестве ссылки. https://code.google.com/p/wpf-mvvm-calculator/downloads/list

+0

Речевой ответ менее вероятен для привлечения голосов, чем тот, который явно затрагивает вопрос оп. –

+3

Вы правы, но моя цель здесь - помочь людям. Меня не интересуют голоса. – sevdalone

5

Я думаю, что ваш вопрос имеет высокую вероятность быть закрытым, потому что он не демонстрирует минимальную готовность прилагать усилия с вашей стороны. Пожалуйста, прочитайте учебник, есть много в Интернете, и сначала попытайтесь понять концепции. Вам нужно, по крайней мере, понять, что такое ViewModel, и как относится к нему представление (привязки).

Возможно, вам не удастся получить рабочий код, который делает именно то, что вы хотите на этом сайте, и я больше заинтересован в том, чтобы объяснить, как все работает.

В любом случае, чтобы получить то, что вам нужно, вам нужен класс, который действует как ViewModel со свойствами, которые представляют собой концепции, с которыми вы работаете. Вы можете иметь десятичные свойства, которые представляют операнды и что-то, что представляет оператор, и команды, которые представляют каждую кнопку в пользовательском интерфейсе. Затем вам нужны привязки, которые связывают элементы интерфейса (текстовые поля, кнопки) с свойствами в ViewModel, и вам нужно установить экземпляр ViewModel в качестве DataContext контейнера для элементов пользовательского интерфейса, которые вас интересуют (будь то окно , Grid или что-то еще). Я думаю, что в значительной степени суммирует его ...