Tehdään WPF-sovellus - 19 - Pohja MVVM-toteutukselle

- 4 mins

Suunitellaan tulosnäkymä uudelleen

Jotta MVVM:stä olisi edes hieman oikeaa hyötyä, voisimme lisätä sovellukseemme paremman tulosten näyttämisen näkymän. Nykyinen tulosten esitystapa on muutenkin luvattoman karun näkönen verrattuna sovelluksemme uuteen uhkeaan tyyliin.

Sovellus näyttää tulokset harmaassa viestilaatikossa. Hyi.

Lisätään siis sovelluksen tyyliä kunnioittava tulosten esityssivu, joka näytetään klikkaamalla “CALCULATE”-painiketta. Varmistetaan myös, että tulosten näkymästä pääsee palaamaan takaisin aloitusnäkymään syöttämään uusia arvoja “BACK”-painikkeella.

Tulokset voitaisiin näyttää näin.

Jaetaan sovellus osiin

Jaetaan näkymä samalla myös loogisiin osiin. Tässä kohtaa on hyvä pähkäillä, että “kenelle” näkymillä olevat elementit tulisi kuulua:

Ratkaisemme ongelman jakamalla näkymän selkeästi kahteen eri osaan: ylempi alue on sisällölle ja alempi pääikkunalle ja toiminto-/navigointipainikkeelle.

Sovellus jaettu loogisiin osiin.

Sovelluksen purkaminen osiin on suoraviivainen toimenpide

Rakensimme sovelluksemme näkymän jo suhteellisen erillisistä komponenteista, joten pilkkomisen pitäisi mennä suht kivuttomasti.

Aloitetaan brutaali pilkkominen luomalla seuraaville palasille omat Viewit ja ViewModelit:

Lisätään ensin uudet näkymät ja järjestellään niiden sisällöt kohdilleen. Toteutetaan näkymät UserControl-tyyppisinä luokkina.

1) Annetaan uudelle syötekenttien näkymälle nimeksi InputView

2) Tehdään ensimmäinen leikkauksemme siirtämällä MainWindow:lta painon ja pituuden elementtikokonaisuudet InputViewille

3) Lisätään InputViewin ruudukolle kaksi RowDefinition-elementtiä, jotka jäivät jälkeen pääikkunan määrittelyyn

Tässä listauksessa lyhennelmä InputView.xaml sisällöstä operaation jälkeen:

<UserControl>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition />
            <RowDefinition />
        </Grid.RowDefinitions>

        <!--  Weight  -->
        <Border>
            <!-- ... -->
        </Border>

        <!--  Height  -->
        <Border>
            <!-- ... -->
        </Border>
    </Grid>
</UserControl>
InputView.xaml

InputView.xaml-tiedoston Designer-näkymän pitäisi näyttää onnistuneen palastelun jälkeen tältä:

InputView.xaml Designer.

Emme myöskään tarvitse pääikkunan näkymällä enää ruudukolla kolmea riviä, joten voimme pudottaa yhden pois ja säätää tilankäytön vastaamaan muutoksia.

Pääikkunan MainWindow.xaml-tiedoston tulisi näyttää tältä:

<Window>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="4*" />
            <RowDefinition />
        </Grid.RowDefinitions>

        <Button Grid.Row="1"
                Click="Button_Click">
            <TextBlock Style="{x:Null}"
                       Text="CALCULATE" />
        </Button>

    </Grid>
</Window>
MainWindow.xaml

Huomaa erityisesti seuraavat asiat:

Korjataan virheet poistamalla koodia

Visual Studion pitäisi tässä vaiheessa antaa kaksi virheilmoitusta WeightInput- ja HeightInput-kenttien puuttumisesta.

Korjataan ongelma tylysti vain poistamalla pääikkunan MainWindow.xaml.cs-taustatiedostosta koko Button_Click-tapahtuman käsittely ja tehdään sama itse näkymän puolella.

-<Button Grid.Row="1"
-        Click="Button_Click">
+<Button Grid.Row="1">
MainWindow.xaml

Tyhjä pääikkuna - MainWindow.xaml.

Seuraavassa osassa lisätään tulosten näyttämiseksi uusi näkymä (ResultView) ja tunkataan sovellus muodostamaan ja käynnistämään pääikkunansa tarpeisiimme sopivammalla tavalla.

Kohta pääsemme luomaan ensimmäiset ViewModelimme!

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