Tehdään WPF-sovellus - 28 - Laskuri laskemaan

- 2 mins

Laskuri omassa luokassaan

Aiemmin laskimme painoindeksin arvon yksinkertaisesti näkymän taustatiedostossa (xaml.cs), mutta voimme tehdä tämän nyt ViewModelin puolella.

Lisätään aluksi laskurille oma luokka Calculator.cs:

using System;

namespace Kettunen.BMICalculator.WPFClient
{
    /// <summary>
    /// Provides a method to calculate a body mass index (BMI) value for a person.
    /// </summary>
    public class Calculator
    {
        /// <summary>
        /// Calculates body mass index (BMI) derived from mass (weight) and height of a person.
        /// </summary>
        /// <param name="weight">Weight in kilograms</param>
        /// <param name="height">Height in meters</param>
        /// <returns>Body mass index value in units of kg/m²</returns>
        public double Calculate(double weight, double height) => weight / Math.Pow(height, 2);
    }
}
Calculator.cs

Otetaan laskuri käyttöön MainViewModelilla ja lasketaan tulos juuri ennen kuin siirrytään tulossivulle:

    public class MainViewModel : ViewModel
    {
        private readonly Calculator _calculator;

        // ...

        public MainViewModel()
        {
            _calculator = new Calculator();

            // ...
            
            Navigate = new DelegateCommand(x =>
            {
                if (x is InputViewModel input)
                {
                    _resultViewModel.Result = _calculator.Calculate(input.Weight, input.Height / 100);
                    CurrentViewModel = _resultViewModel;

                    // ...
MainViewModel.cs

Hienoa, nyt meillä on taas täysin toimiv.. Ei. Eikö? No ei 🙈

Tekstiä voi muotoilla StringFormatilla

Jos annat sovellukselle painoksi “123”, pituudeksi “456” ja suoritat laskennan, niin tulokseksi tulee turhan pitkä 5.915281... Voisimme esittää tuloksen maksimissaan kahdella desimaalilla.

Korjataan ongelma tulosnäkymän xaml-puolella asettamalla tuloksen bindaukselle StringFormat-muotoilun seuraavasti:

<TextBlock Grid.Row="1"
            Text="{Binding Result, StringFormat=0.##}" />
ResultView.xaml

Nyt sovelluksemme pitäisi olla aika hyvässä mallissa:

Sehän toimii!

Välivaihe

Olemme saaneet tähän asti paljon aikaiseksi. Voit onnitella itseäsi, jos olet päässyt tänne asti ja olet mahdollisesti saanut oman version sovelluksesta toimimaan! 🦊

Nyt voit ottaa pienen hengähdystauon. Sovelluksellemme voidaan tehdä vielä paljonkin asioita, mutta tässäpä muutama, jotka nousevat mieleeni:

Eiköhän tässä riitä taas jatkoon hieman purtavaa!

Anssi Kettunen

Anssi Kettunen

Ohjelmistokehittäjä suorittamassa tehtävää 🦊

rss facebook twitter github gitlab youtube mail spotify lastfm instagram linkedin google google-plus pinterest medium vimeo stackoverflow reddit quora quora