WPF MVVM Training

Download Report

Transcript WPF MVVM Training

WPF MVVM Training
Michael Sync (Silverlight MVP)
Adopting the MVVM pattern with WPF
•
•
•
•
•
•
Understanding MVVM
Motivation and benefits
Implementing the pattern
Dependency Injection and IoC
Unit Test and Mock
Supporting libraries and frameworks
What's MVVM?
• is an architectural pattern created
by John Gossman from WPF team
• is a variation of MVC pattern
• is similar to Martin Fowler’s
PresentationModel pattern
• WPF Data Binding & Commanding
Motivation and benefits
• Testabiltiy ( ViewModel is easier to unit test than codebehind or event driven code)
• Clear seperation between UX designer and
developer
• Increases the "Blendability" of your view
• Model never needs to be changed to support
changes to the view
• ViewModel rarely needs to be changed to
support changes to the view
• No duplicated code to update views
MVVM
View
ViewModel
Model
• View knows ViewModel
• ViewModel knows Models
• But not vice versa.
View
• represents the user interface that the user will
see.
• can be a user control or Data Template
• shouldn't contain any logic that you want to
test
• Keep the view as simple as possible.
View Model
•
•
•
•
An abstraction of View
Connector between View and Model
Keep View State, Value Conversion
No strong or weak (via Interface) reference of
View
• Make VM as testable as possible (e.g. no call
to Singleton class)
• No Control related Stuff in VM
Model
• can be Data Model, DTO, POCO, autogenerated proxy of domain class and UI Model
based on how you want to have the
separation between Domain Service and
Presentation Layer
• No reference to ViewModel
Disadvantages of MVVM
• lack of standardization so
everyone has own favor
• For simple UI, M-V-VM can be
overkill
Implementing MVVM
•
•
•
•
DEMO – Simple MVVM
DEMO – MVVM + Data Template
DEMO – DI + IoC
DEMO – BDD
Supporting libraries and frameworks
•
•
•
•
•
•
•
•
•
•
•
•
WPF Team : MVVM Toolkit
MS Pattern and Practice Team : Composite WPF (Prism)
Josh Smith. "MVVM Foundation"
Sacha Barber. "Cinch."
Karl Shifflett. "Ocean"
Laurent Bugnion. "MVVM Light Toolkit"
Lester Lobo. "CoreMVVM"
Rob Eisenberg. "Caliburn"
William e Kempf. "Onyx"
Peter O’Hanlon. "GoldLight"
jbe. "WPF Application Framework (WAF)"
Paul Stovel : MacroModels