The Model-View-ViewModel pattern (also called MVVM) is a hot topic in today’s Silverlight and WPF world. This pattern facilitates modern development techniques such as separation of concerns (decoupling), unit testing and test driven development, work with modern tools such as Visual Studio 2010, Expression Blend and more.
In this session, Laurent (a user and promoter of MVVM since 2006) will introduce this pattern to you with many demos. We will talk about the basic components of a modern Silverlight or WPF application, and of additional helpers that will make your life as a developer much easier.
3. What is MVVM?
• A weird acronym
• Model – View – ViewModel
• « MVVM in a SLOOB with SLUT »
• Woven into WPF/SL
• Some confusion:
• MVVM is really just the pattern
• The rest are helpers, practices, etc
7. Blendability
• Testability, Maintainability, Blendability
• “The ability to be edited in Blend”
• (and Visual Studio designer…)
• Differentiate code in design and runtime
• Create design time data
9. Bridging the gap
View
DataBinding Commands Messages
ViewModel
Model
10. Bridging the gap
View
View
Messages ViewModel
ViewModel
View
Messages
+ callback
ViewModel
11. Commands
• “Point of entry” for a method”
• Can be data bound
• ICommand interface
• Execute method
• CanExecute method
• CanExecuteChanged event handler
13. RelayCommands
RelayCommand MyCommand
= new RelayCommand(
() => ...,
() => true | false);
RelayCommand<T> MyGenericCommand
= new RelayCommand<T>(
p => ...,
p => true | false);
14. Messaging
• Should be simple by default
• Possible to open filtered channels
• To a target Type (or an Interface)
• With a Token
• With various Messenger instances
• No constraints at all
17. MVVM Light Toolkit
• “Breaking the monotony”
• http://www.galasoft.ch/mvvm/getstarted
• http://mvvmlight.codeplex.com
• V3 released at MIX10
• Keep it small
• Keep it simple
21. Flaws of MVVM
• Too much code needed
• INotifyPropertyChanged
• Commands
• Some operations are tricky (set focus…)
• Not applicable to ASP.NET, etc
• Message to community is not clear
22. Debunking the myths
• “No code in the code behind”
• “If you put code in the View's code-behind, the
MVVM police will take your family away”
• “No need for converters”
• “MVVM is only suitable for big projects”
• “MVVM costs performance”
• “MVVM is complex / makes my head hurt”
23. Debunking the myths
• “I don’t need separation because I don’t
have a designer”
• “You cannot use MVVM with other
patterns”
• “MVVM will make you rich and attractive”