INTRODUCTION TO WPF
AND MVVM
SIRAR SALIH
.NET CONSULTANT
Windows Presentation Foundation
• Graphical subsystem introduced by Microsoft to render user interfaces, and
allow development of rich, interactive client applications
• Was initially known as «Avalon» and first released in .NET 3.0
• Uses DirectX
• 2D/3D rendering, vector graphics, animation etc.
• Attempts to seperate UI from logic
– XAML
• Deployment
– Standalone desktop client
– Can also be embedded in web

19.01.2014

/

3
Windows Presentation Foundation
• Microsoft PixelSense (Surface 2.0)

19.01.2014

/

4
Windows Presentation Foundation
• Silverlight
– Most functionality is a subset of WPF
• Latest release: WPF 4.5

19.01.2014

/

5
Model-View-ViewModel
• Architectural pattern based on Model-View-Controller (MVC)
• Seperation of Concerns
– Data/Domain objects (Model), GUI (View), logic (ViewModel)

• Eliminates «code-behind»
• The beauty of it: Designers can work indepedently on the views and UX,
while developers work on the back-end

• Allows [easier]:
– Maintainability
– Testability
– Blendability

19.01.2014

/

6
Model-View-ViewModel
GUI

View

Logic

ViewModel

Domain

Model

19.01.2014

/

7
WPF + MVVM

How about we combine them? That’s awesome! 

19.01.2014

/

8
Combining WPF and MVVM
View
Commands

DataBinding

ViewModel

Model

19.01.2014

/

9
DataBinding
• Establishes connection between Views and ViewModels
• Enables the View to bind to properties in the ViewModel
• DataContext
• Two-way binding
• Dependency properties

19.01.2014 /

10
Commands
• Enable the View to call methods in the ViewModel
• Exposed as properties from the ViewModel
• Implement ICommand

19.01.2014 /

11
MVVM frameworks for WPF
Cocktail
Carbon MVVM

Caliburn
Xomega

MVVM Cross

MVVM foundation

Onyx

MVVM Light Toolkit
Cinch

Jounce

Core MVVM
Ocean

Prism
Reactive UI

Goldlight

Catel

19.01.2014 /

12
MVVM Light Toolkit
•
•
•
•
•
•
•

By Laurent Bugnion
Small and simple
Breaking the monotony
Essentials library
Extras library
Project templates
Code snippets

19.01.2014 /

13
ViewModelBase
• Utility class that ViewModel inherits from
• Eliminates code duplication
• Introduces the RaisePropertyChanged method, among others

19.01.2014 /

14
EventToCommand
• Enables the passing of arguments to the ViewModel through the Command
• Interaction triggers are used on top, for events (that fire the command)

19.01.2014 /

15
RelayCommand
• An alternative to Command and RoutedCommand in WPF
• Also implements ICommand
• Relays Execute to own defined method, therefore eliminates the need to
create a class for each custom Command

19.01.2014 /

16
Messaging
• Easier communication between ViewModels
• Uses Publish-Subscribe pattern
• A receiver ViewModel registeres on a specific type message
• A sender ViewModel creates a message of that specific type and sends
it, receiver gets it

19.01.2014 /

17
Messaging
View

View
Messages

ViewModel

ViewModel
View
Messages

ViewModel
19.01.2014 /

18
Messaging
• Message:

• Sender:

• Receiver:

19.01.2014 /

19
DispatcherHelper
• Useful when working on multi-threaded WPF applications
• Enables the calling of a method on the UI thread from a different thread
• Use this or DispatcherTimer when creating a thread, never use a Timer

19.01.2014 /

20
Live demo

19.01.2014 /

21
Future of WPF
• Windows RT
– No support
• Windows 8 Desktop
– Works
• XAML usage in Windows 8 Store apps

19.01.2014 /

22
QUESTIONS?
THANK YOU

19.01.2014 /

23
Introduction to WPF and MVVM

Introduction to WPF and MVVM