3. 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
6. 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
8. WPF + MVVM
How about we combine them? That’s awesome!
19.01.2014
/
8
9. Combining WPF and MVVM
View
Commands
DataBinding
ViewModel
Model
19.01.2014
/
9
10. 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
11. Commands
• Enable the View to call methods in the ViewModel
• Exposed as properties from the ViewModel
• Implement ICommand
19.01.2014 /
11
13. MVVM Light Toolkit
•
•
•
•
•
•
•
By Laurent Bugnion
Small and simple
Breaking the monotony
Essentials library
Extras library
Project templates
Code snippets
19.01.2014 /
13
14. ViewModelBase
• Utility class that ViewModel inherits from
• Eliminates code duplication
• Introduces the RaisePropertyChanged method, among others
19.01.2014 /
14
15. 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
16. 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
17. 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
20. 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