Cover
Copyright
Credits
Foreword
About the Authors
About the Reviewer
www.PacktPub.com
Table of Contents
Preface
Chapter 1: Presentation Patterns
The Project Billing sample application
Types of state
History of presentational patterns
Monolithic design
The problems with monolithic design
Data service stub
Monolithic Project Billing sample
ProjectsView
Running the sample
Takeaways
Rapid application development
RAD Project Billing sample
Takeaways
MVC
View
Controller
Model
Layered design
The layers
MVC with layered design
MVC Project Billing sample
Model
Controller
View
How it works
Takeaways
Memory leaks
MVP
MVP Project Billing sample
Model
View
Presenter
Main window
How it works
Takeaways
Summary
Chapter 2: Introduction to MVVM
History
Structure
Pure MVVM
View
View Model
WPF and Silverlight enablers
Dependency Properties
Dependency property inheritance
Rich data binding
INotifyCollectionChanged and ObservableCollection<>
Automatic dispatching
Triggers
Styles
Control Templates
Data templates
Commands
MVVM project billing sample
MVVM design
View Models
Model
Code
ProjectsModel
ProjectViewModel
ProjectsViewModel
WPF UI
Silverlight UI
Benefits of MVVM
MVVM and humble views
Issues and pain points of MVVM
MVVM Light
Summary
Chapter 3: Northwind – Foundations
Northwind requirements
Presentation tier foundation
Locator pattern
Data access tier
Listing the customers
Unit testing getting customers
Using an isolation framework
Adding tabs
Viewing customer details
Viewing details for one customer
Testing CustomerDetailsViewModel
Wiring up the customer list box
Testing ShowCustomerDetails()
Summary
Chapter 4: Northwind—Services and Persistence Ignorance
Adding a Service Layer
Integrating the Service Layer
Persistence ignorance and custom models
Trade-offs of generated models
Adding persistence ignorance
Adding unit tests
Summary
Chapter 5: Northwind—Commands and User Inputs
Pure MVVM
Making it easier with frameworks
Updating customer details
Testing and updating customer details
Gestures, events, and commands
InputBindings
KeyBinding
MouseBinding
Using code behind
Event to command
Attached Behavior
Using MVVM Light
Summary
Chapter 6: Northwind—Hierarchical View Model and IoC
Adding orders to customer details
Service layer
Application layer
Presentation layer
View Models
Views
Take aways
Viewing order details
ToolManager
Inversion of Control frameworks
IoC designs
Adding an IoC container to Northwind
Order details
Summary
Chapter 7: Dialogs and MVVM
Should we make a compromise?
Dialog service
Using DataTemplates with DialogService
Convention over configuration
Mediators
Attached behaviors
Summary
Chapter 8: Workflow-based MVVM Applications
WF for business rules execution
Handling delays in rules execution
WF for controlling application flow
Summary
Chapter 9: Validation
Validations and dependency properties
Error templates
Validation in MVVM-based applications
Validation rules
Using validation rules
Specializing validation rules—supporting parameters
Validation rules and converters
Validation mechanism in WPF and Silverlight
IDataErrorInfo
Validation states
Limitations and gotchas
INotifyDataErrorInfo
Enterprise library validation application block
Complex business rules
Error notifications
Error message box
Highlighting fields
Error messages in the tooltip
Error messages beside the control
Validation summary pane
Flip controls
Summary
Chapter 10: Using Non-MVVM Third-party Controls
Using attached behaviors
Using binding reflector
readonly CLR properties (with no change notification support)
Using .NET 4.0 dynamic
Using MVVM adapters
Summary
Chapter 11: MVVM and Application Performance
Asynchronous binding
Asynchronous View Model construction
Priority binding
Virtualization and paging
Using BackgroundWorker
Targeting system configuration
Event Throttling
Lazy Initialization
Summary
Appendix A: MVVM Frameworks
Appendix B: Binding at a Glance
Basics
Validation
ValidationRules
IDataErrorInfo
INotifyDataErrorInfo [.net 4.5]
Enterprise Library 5.0 Validation Application Block
Windows WF
Validation.ErrorTemplate
Static properties/fields
Executing code in DataContext
Binding to DataContext[DC]
Resources
Types with default constructor
XmlDataProvider
ObjectDataProvider
Binding to resource
Static resource
Dynamic resource
Updating source
Binding.UpdateSourceTrigger
Binding.Delay: [.net 4.5] [Binding.Mode:TwoWay / OneWayToSource ]
Mode [Binding.Mode] [T:Target, S:Source]
Binding to other elements in the view
ElementName
RelativeSource
Conversion
Binding.StringFormat [SF]
Converter [C]
Performance
Async binding
ObjectDataProvider.IsAsynchronous
PriorityBinding
Index