ViewModel - GalaSoft Laurent Bugnion

Download Report

Transcript ViewModel - GalaSoft Laurent Bugnion

Understanding the
MVVM pattern
Laurent Bugnion
Senior User Experience Integrator
IdentityMine
http://[blog|www].galasoft.ch
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
The MVC pattern
Model
View
Controller
The Passive View pattern
Model
View
Controller
The Presentation Model pattern
Model
View
DataBinding
Presentation
Model
(ViewModel)
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
Hello MVVM (and Hi Blend)
Bridging the gap
View
DataBinding
Commands
ViewModel
Model
Messages
Bridging the gap
View
View
Messages
ViewModel
ViewModel
View
Messages
+ callback
ViewModel
Commands
• “Point of entry” for a method”
• Can be data bound
• ICommand interface
• Execute method
• CanExecute method
• CanExecuteChanged event handler
Commands
and RelayCommands
RelayCommands
RelayCommand MyCommand
= new RelayCommand(
() => ...,
() => true | false);
RelayCommand<T> MyGenericCommand
= new RelayCommand<T>(
p => ...,
p => true | false);
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
Messaging
Messaging
Messenger.Default.Register<T>(
this,
p => DoSomething(p));
Messenger.Default.Send<T>(p);
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
MVVM Light Libraries V3
• ESSENTIALS
• RelayCommand
• Messenger
• ViewModelBase
• EXTRAS
• EventToCommand
• DispatcherHelper
MVVM Light Tools V3
• Project templates (VS + Blend)
• Item templates (VS + Blend)
• Code snippets
MVVM Light Toolkit,
Unity,
Blendability
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
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”
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”
MVVM on the
Windows Phone 7
http://blog.galasoft.ch
http://www.galasoft.ch/mvvm/getstarted
@LBugnion