Escolar Documentos
Profissional Documentos
Cultura Documentos
Webcast Overview
Introduction to MVVM Benefits of MVVM Key WPF features which support MVVM
Data Binding Commanding
Introduction to MVVM
Stands for Model-View-ViewModel Popular architectural design pattern Makes it easy to design scalable, robust applications Follows separation of UI and business logic Similar to MVC, MVP, Presentation Model Specifically for WPF (and Silverlight)
MVC vs MVVM
View
Controller
ViewModel
View
Model
Model
MVVM
MVC
WPF Features
Data Templates Data Binding Attached Properties Commands Resources
MVVM
XAML What you see on the screen DataContext bound to ViewModel No knowledge of Model C#/VB
View
Model
The data classes Connections to external data sources No knowledge of ViewModels or Views
View
ViewModel
Model
Commanding
Separation of origin from handling of action Key feature of WPF and MVVM Commands consist of 4 parts
Command Action (i.e. Paste) Source Object (i.e. Button) Target Object (i.e. TextBox) Binding (maps command to logic)
Implements ICommand
Execute CanExecute
Commanding
View
Commands
ViewModel
Model
ICommand Implementations
RoutedCommand
Routed through UI element tree Target must be part of UI element tree
DelegateCommand
Delegates command logic to methods Allows Views to bind to the ViewModel
RelayCommand
Relays functionality by invoking delegates Lightweight variation of DelegateCommand Allows Views to bind to the ViewModel
MVVM Commanding
<Button Command={Binding ClearCommand} /> public ICommand ClearCommand Execute method calls ClearData
View
ViewModel
True separation of view and model Scalability Testability Automatic Updates using INotifyPropertyChanged
Myths
A well-designed MVVM application has almost no code-behind in its views MVVM is just for data centric applications
Resources
WPF MVVM Toolkit
Includes project templates (VS2008) http://wpf.codeplex.com/releases/view/14962
Conclusion
Sample and slides can be accessed later on the C1 Silverlight and WPF blog Questions? Contact me: Greg Lutz
gregoryl@componentone.com
Thanks!