4. Model-View-ViewModel (MVVM)
•Arkkitehtuurimalli
•Taas uusi malli MVC, MVP jne.
•Käyttö läheisesti WPF, Silverlight ja WP7
•XAML View View Model
Code
•Ylläpidettävyys (XAML)
•Testattavuus Services
•Blendable...
Model
(Domain, SQL,
File, Memory...)
5. Arkkitehtuurimallien evoluutio
•MVC
Model-View-Controller
Pohjana monentyyppisille sovelluksille
•MVP
Model-View-Presenter
ASP.NET Web Forms
Windows Forms
•MVVM...
7. WPF ja MVVM
•Suositeltava malli...
•Ei pelkästään WPF
Silverlight
Windows Phone 7 (WP7)
•Tukena tekniikoita
XAML
Databinding
Data templates
Commanding
8. Model
•Osio (luokka) joka sisältää tietorakenteet
•Voi myös olla proxyluokka WCF palveluun
View ViewModel Model
9. ViewModel
•Osio joka hoitaa tiedon View osioon ja osiolle
•Kommunikoi View ja Model osioiden kesken
•Ilmoittaa View osiolle tiedon muutoksista,… vaikka
ei tiedä View osiota
•Uudelleenkäytettävyys parempi kuin code-behind
•Ei tunne View osiota, huomattava ero MVC ja
MVP malleihin nähden
View ViewModel Model
10. View
•Käyttää Bindingia kytkeytyessä ViewModel
osioon, DataContext, Binding jne.
•Esittää (visualisoi) sovelluksen tiedon ja tilan
ViewModel osiosta
•Käyttöliittymä, taustalla XAML
•Vähän tai ei ollenkaan code-behind koodia
View ViewModel Model
11. MVVM ohjeistus
1. Vähennä tai eliminoi code-behind
2. Sido kaikki syötteet ja tulosteet ViewModel osioon
3. Toteuta INotifyPropertyChanged rajapinta ViewModel
osioon
4. Testauksessa ViewModel osio kuin se olisi
käyttöliittymä
5. Vältä eventtejä, käytä Commandingia
14. ViewModel luokka
•Mahdollisesti toteuttaa IEditableObject
rajapinnan
BeginEdit, CancelEdit, EndEdit
•Toteuttaa INotifyPropertyChanged
rajapinnan
PropertyChanged event
Mahdollistaa View:n reagoimaan tiedon
muutoksiin
15. View:n sitominen
•DataContext
View luo ilmentymän ViewModelista
Sitoo sen itsensä (window/page/usercontrol...)
DataContextiin
tai XAML:lla
• <Window.DataContext>
• <myLocal:MainWindowViewModel/>
• </Window.DataContext>
•Binding
Sidotaan käyttöliittymäoliot XAML:lla
<TextBox Text="{Binding Path=CreateDate,
Mode=OneWay}" . . .
16. Avaintekniikat - Databinding
•Käyttöliittymä odottaa tietoa mutta ei sido
suoraan mihinkään olioon
•DataContext käyttöliittymälle
•Kuvataan XAML:lla
<TextBox Text="{Binding Path=Name, Mode=TwoWay,
UpdateSourceTrigger=LostFocus,
ValidatesOnExceptions=True}“
Converter={StaticResource MessageForegroundColor},
ConverterParameter=FormStateMessageType}"
IsEnabled="{Binding Path=IsEditing}"
. . .
17. Avaintekniikat - Databinding
•Path
Ominaisuuden nimi DataContextista
•Mode
Tiedon suunta ViewModelista
TwoWay, OneWay jne.
•ValidatesOnException
Tiedon validointi
•Converter
Oma esitys tiedolle, esim. bool tieto jotain muuta kuin
true/false
18. Avaintekniikat – Data Templates
•Mahdollistaa joustavasti visuaalisen
ilmeen muuttamisen
20. Avaintekniikat – Commanding
•Liittää käyttöliittymän toiminnallisuuden
ViewModel osioon
•Builtin Commands
Cut, Copy, Paste jne.
Play, Stop, Pause jne.
•Omat Commandit ja sitominen
ICommand
21. Avaintekniikat – Resources
•Tapa kuvata esim. Käyttöliittymä osia
resursseina tilanteen mukaan XAML –
kielellä.
•Paikalliset ja globaalit resurssit, perintä ja
ylikirjoitus jne.
<Page.Resources>
<converter:MessageForegroundColor
x:Key="MessageForegroundColor" />
</Page.Resources>
24. Yhteenveto
• Suositeltava malli käytettäessä WPF,
Silverlight ja WP7 kehyksiä
• Yksinkertaisessa sovelluksessa voi olla
”overkill”
• Oppimiskynnys voi tuntua
haastavammalta kuin ”perinteinen tapa”
mutta lopulta tekniikat eivät olekaan niin
haastavia
• Ylläpidettävyys, testattavuus