You are on page 1of 43

MVVM

De la dcouverte
la matrise

Jonathan Antoine et Thomas Lebrun

MVVM
De la dcouverte
la matrise
Focus

Digit Books
diteur de livres numriques
Brest
infos@digitbooks.fr
http://www.digitbooks.fr

Digit Books, 2011


ISBN : 978-2-8150-0209-7
Prix PDF : 15

Couverture : Yves Buraud


Illustration des auteurs
http://www.digitbooks.fr/catalogue/mvvm-antoine-lebrun.html

Les programmes figurant dans ce livre ont pour but dillustrer les sujets traits. Il nest donn aucune garantie quant
leur fonctionnement une fois compils, assembls ou interprts dans le cadre dune utilisation professionnelle
ou commerciale.
Toute reprsentation ou reproduction, intgrale ou partielle, faite sans le consentement de lauteur, de ses ayants
droit, ou ayants cause, est illicite (loi du 11 mars 1957, alina 1er de larticle 40). Cette reprsentation ou reproduction, par quelque procd que ce soit, constituerait une contrefaon sanctionne par les articles 425 et suivants du
Code pnal. La loi du 11 mars 1957 autorise uniquement, aux termes des alinas 2 et 3 de larticle 41, les copies ou
reproductions strictement rserves lusage priv du copiste et non destines une utilisation collective dune
part et, dautre part, les analyses et les courtes citations dans un but dexemple et dillustration.

Table des matires


Prface de David Catuhe

Prface des auteurs

1 Prsentation du pattern MVVM


1. 1. Le pattern MVVM : quest-ce que c'est?
1. 2. Historique et objectifs
1. 2. 1. Historique
1. 2. 1. 1. Le pattern MVC (Model-View-Controller)
1. 2. 1. 2. Le pattern MVP (Model-View-Presenter)
1. 2. 2. Les objectifs
1. 3. Les frameworks MVVM existants
1. 4. Pourquoi et quand prfrer le pattern MVVM?
1. 5. retenir

3
4
4
5
6
6
6
6
6
7
7
8
8
9
10
11
11
11
13
14
16
18
21

Pourquoi ce livre
Prrequis et public
Organisation de louvrage
Les conventions utilises
propos des auteurs
Jonathan Antoine
Thomas Lebrun
propos des relecteurs
Arnaud Auroux
David Catuhe
Julien Corioland
Lonard Labat
Remerciements

Table des matires

Les diffrents lments et leurs rles


2. 1. Le modle de donnes
2. 1. 1. Le modle global et le modle de prsentation
2. 1. 2. Utilisation du modle par le ViewModel
2. 1. 3. Utilisation du modle par la vue
2. 1. 4. Quels sont les diffrents acteurs?
2. 2. La vue: une reprsentation concrte des donnes et
des actions possibles
2. 2. 1. Une vue peut utiliser plusieurs ViewModel
2. 2. 2. Quels sont les diffrents acteurs?
2. 2. 3. Quel type de contrles choisir?
2. 3. Le ViewModel: une reprsentation abstraite de la vue
2. 3. 1. Le ViewModel, cest de la tarte
2. 3. 2. Ce nest pas le contrleur quil y avait dans MVC
2. 3. 3. Quels sont les diffrents acteurs?
2. 3. 4. Le ViewModel na pas besoin dune vue
2. 4. retenir

3 Les diffrentes philosophies


3. 1. View First
3. 1. 1. Dfinition
3. 1. 2. Implmentation
3. 1. 2. 1. Le ViewModelLocator
3. 1. 2. 2. Autre possibilit
3. 1. 3. Avantages
3. 1. 4. Inconvnients
3. 1. 5. Autres remarques
3. 1. 6. retenir du View First
3. 2. ViewModel First
3. 2. 1. Dfinition
3. 2. 2. Implmentation
3. 2. 3. Avantages
3. 2. 4. Inconvnients
3. 2. 5. Autres remarques
3. 2. 6. retenir du ViewModel First
3. 3. Model First
3. 3. 1. Dfinition
3. 3. 2. Implmentation
3. 3. 3. Avantages

22
24
24
26
26
27
28
31
32
35
36
37
39
40
40
41
42
43
43
45
46
47
48
49
50
50
51
51
52
56
56
58
58
59
59
59
61

ii

Table des matires

3. 3. 4. Inconvnients
3. 3. 5. retenir du Model First
3. 4. Quelle philosophie adopter
3. 5. retenir
4 Construire la partie modle
4. 1. Architecture du modle de donnes
4. 2. Comment dfinir le modle global
4. 3. Comment crer le modle client
4. 3. 1. Classe de base du modle client
4. 3. 2. Dfinition du modle client
4. 3. 2. 1. Mapping
4. 3. 2. 2. Wrapping
4. 4. Comment concevoir les services daccs aux donnes
4. 4. 1. Abstraction des services de donnes
4. 4. 2. Implmentation concrte des services
4. 4. 3. Le pattern Unit Of Work
4. 4. 4. Appels asynchrones
4. 5. Validation des donnes
4. 5. 1. Validation du format
4. 5. 2. Validation fonctionnelle
4. 6. dition des donnes: suivi des valeurs du modle client
4. 7. retenir
5 Construire un ViewModel

iii

61
62
62
63
64
65
68
72
72
75
76
80
83
83
86
92
95
100
101
110
113
119
120

5. 1. Architecture et relations entre les ViewModels


121
5. 1. 1. Classe de base des ViewModels
121
5. 1. 1. 1. Un objet .Net classique
121
5. 1. 1. 2. Pourquoi ne pas utiliser un DependencyObject
comme classe de base ?
122
5. 1. 2. Hritage de ViewModels
124
5. 1. 3. Composition
127
5. 2. Un ViewModel pour les gouverner tous
129
5. 3. Injection de dpendances
132
5. 4. Comment exposer les diffrentes entits ?
136
5. 4. 1. Sous quelle forme exposer le modle?
137
5. 4. 2. Comment utiliser les services daccs aux donnes ?
140
5. 4. 3. Trier, filtrer et grouper les donnes exposes et suivre llment
142
courant
5. 4. 3. 1. Filtrer les donnes
144
5. 4. 3. 2. Grouper les donnes
145

Table des matires

6 Construire les vues


6. 1. Une vue concrtement cest quoi?
6. 1. 1. Le code-behind, cest dmod!
6. 1. 1. 1. Le code-behind cest peut-tre dmod,
mais cest quand mme pratique!
6. 1. 1. 2. Autres arguments prendre en compte
6. 2. Architecture des vues
6. 2. 1. Les ressources graphiques transverses
6. 2. 1. 1. Les diffrents types de ressources
6. 2. 1. 2. Emplacement des ressources
6. 2. 1. 3. Limiter lempreinte mmoire de lapplication
6. 2. 2. La vue principale
6. 2. 3. Les diffrents crans fonctionnels
6. 2. 4. Les reprsentations graphiques du modle de prsentation
6. 2. 5. Les crans prdfinis dinteraction avec lutilisateur
6. 3. Utilisation simple du ViewModel
6. 3. 1. Utilisation des Bindings
6. 3. 2. Utilisation des Converters
6. 3. 3. Ragir aux actions de lutilisateur
6. 3. 3. 1. Utilisation sur des contrles graphiques classiques
6. 3. 3. 2. Utilisation des InputsBindings
6. 4. Techniques avances au sein des vues
6. 4. 1. Les behaviors Blend, lorsque les commandes ne
suffisent plus
6. 4. 2. Le design pattern Ramora
6. 4. 2. 1. Le design pattern Ramora: dfinition
6. 4. 2. 2. Premire implmentation technique du pattern

146
146
148
148
150
153
155
156
157
158
159
162
165
166
167
169
169
170
171
172
173
174
177
179
181
183
186
193
193
199
201
202
203
207
207
210
210
212

5. 4. 3. 3. Trier les donnes


5. 4. 3. 4. Suivre llment courant
5. 5. Comment exposer les diffrentes actions ?
5. 5. 1. Le systme de commandes
5. 5. 2. Comment implmenter facilement une commande ?
5. 5. 3. Exemple concret de commande
5. 5. 4. Amlioration du systme de commandes
5. 6. Communication entre diffrents ViewModels
5. 6. 1. Explication de la problmatique
5. 6. 2. Le pattern Mdiateur la rescousse
5. 6. 3. Implmentation technique de la solution
5. 6. 4. Un exemple concret de mise en uvre
5. 7. retenir

iv

Table des matires

7 dition de contrles personnaliss


7. 1. Cration de contrles personnaliss
7. 1. 1. Bien choisir la classe de base
7. 1. 2. Exposer les informations importantes
7. 1. 3. Exposer des vnements
7. 1. 3. 1. vnements routs
7. 1. 3. 2. vnements classiques
7. 1. 4. Donner le contrle aux dveloppeurs
7. 1. 4. 1. Commandes routes
7. 1. 4. 2. Commandes classiques
7. 1. 5. Dfinir le rendu visuel du contrle
7. 2. Cas pratique: le contrle de mise en attente
7. 2. 1. Description du besoin : cahier des charges
7. 2. 2. Choix du contrle de base
7. 2. 3. Cration de la reprsentation visuelle
7. 2. 4. Mise en place de la logique fonctionnelle
7. 2. 5. Annuler laction
7. 2. 6. Utilisation concrte du contrle
7. 2. 6. 1. Exemple de code au sein dune vue (fichier XAML)
7. 2. 6. 2. Exemple de code au sein dun ViewModel
7. 3. retenir

215
217
222
222
225
225
230
231
232
232
233
238
239
241
243
244
245
245
247
248
248
250
251
251
254
254
256
256
258
259
263
265
267
267
267
269

6. 4. 2. 3. Amlioration de cette implmentation laide des


WeakEvents
6. 4. 3. Binding avanc sur les lments slectionns
6. 5. Utilisation du modle
6. 5. 1. Afficher les informations de validation
6. 5. 2. Utiliser les types particuliers
6. 5. 2. 1. Les valeurs numres
6. 5. 2. 2. Utilisation dindexer ou de dictionnaires
6. 5. 3. Mettre en forme les collections
6. 6. Mettre en place des interfaces vivantes et ractives
6. 6. 1. Transitions simples sans animation
6. 6. 2. Transitions avec animations
6. 7. Concevoir les vues sans ViewModel concret
6. 7. 1. Instances de donnes
6. 7. 2. Donnes de tests
6. 8. retenir

Table des matires

8. 1. Limportance des tests


8. 1. 1. Les tests fonctionnels
8. 1. 2. Les tests unitaires
8. 1. 3. Les tests dinterfaces graphiques
8. 2. Tests du modle
8. 3. Tests du ViewModel
8. 3. 1. Utilisation avec WPF
8. 3. 1. 1. Initialisation des tests unitaires
8. 3. 1. 2. Mise en place de bouchons
8. 3. 2. Le cas de Silverlight
8. 4. Tests des vues
8. 5. retenir

271
271
272
272
273
274
275
275
276
280
281
285
288

9 Glossaire

289

Index

291

8 MVVM et testabilit

vi

Prface de David Catuhe


Comment faire un bon dveloppement? En voil une question qui aura et qui
fera couler beaucoup dencre. On peut mme dire quil sagit dans le domaine
de linformatique dune vraie question philosophique. Les design patterns
sont apparus pour tenter dapporter une pierre la ldifice qui se propose de
rpondre cette interrogation ; leur but tant de fournir des briques algorithmiques pour des situations prcises. Ces briques ont tous les avantages dune
solution qui a t longuement rflchie et couvrent donc un ensemble plus
ou moins important de problmes.
Parmi ces designs patterns, MVVM est sorti rcemment du lot car il sintgre
de manire trs efficace dans nos environnements de dveloppement, tels
que WPF ou Silverlight. Il adresse notamment le besoin imprieux de pouvoir
tester simplement et de manire automatique. Il guide galement le dveloppeur sur le chemin tortueux de la sparation forte des couches, ce qui
permet davoir des architectures modulaires et hautement adaptables.
Bien videmment, MVVM reste un design pattern et ne fera pas le travail
votre place. Il donne juste un cadre, des outils et une manire darchitecturer nos projets. Cest un acclrateur et un moyen de scuriser un projet.
Vous pourriez trs bien faire vos dveloppements sans (ou avec mais sans le
savoir). Toutefois lide est ici de rutiliser des rflexions de la mme manire
que lon rutilise du code.

Prface de David Catuhe

Et comme tous les sujets la mode, de nombreux crits sont apparus sur le
sujet de MVVM. tant amateur de philosophie mes heures, je me suis donc
intress la vision que chaque auteur pouvait avoir de lapproche et surtout
comment la relation avec le monde rel de lentreprise et du dveloppement
dans la vraie vie tait faite. Et ce que lon peut dire cest que le pragmatisme nest pas souvent de mise.
Cest donc avec un plaisir non dissimul que jai lu le livre que vous avez entre
les mains car il aborde le sujet de manire claire avec des exemples concrets
et pragmatiques. On ressent que les auteurs, que je flicite au passage, ne
sont pas uniquement des thoriciens mais aussi des dveloppeurs de terrain
qui ont mis en pratique maintes fois ce quils conseillent. Ils ne parlent donc
pas uniquement des bonnes choses, mais galement des cueils quil faut
viter.
Au final, vous ressortirez de la lecture de ce livre avec une vision claire de
MVVM, mais galement avec les poches pleines dexemples de code et de
rflexions intgrer dans vos futurs dveloppements.
Mme si loutil est important, cest la main qui le tient qui fait la diffrence. Et
votre main ne sera que plus efficace avec ce livre.
David CATUHE
Responsable relations techniques avec les dveloppeurs Microsoft
http://blogs.msdn.com/b/eternalcoding/

Prface des auteurs


Pourquoi ce livre
Consultants et formateurs en socit de services, nous avons souvent t
amens rencontrer des personnes dsireuses de commencer un nouveau
projet WPF, Silverlight ou Windows Phone, mais qui ne savaient pas trop par
o commencer. Certes, lvolution de la technologie a permis de mettre en
avant des techniques et pratiques maintenant utilises par bon nombre de
dveloppeurs. Mais une question persiste toujours : pour son dveloppement, comment faire pour (bien) dmarrer?
Souvent, si ce nest toujours, ces technologies riment avec MVVM. Cet acronyme du terme anglais Model View ViewModel correspond une architecture
spcifique et une srie de bonnes pratiques de dveloppement inexorablement lies ces nouvelles technologies. Cest dans le cadre de nos expriences sur le terrain que nous avons pu nous familiariser avec ce pattern
et matriser ses spcificits.

Nous avons donc souhait faire profiter les lecteurs des connaissances que
nous avons acquises, sur le terrain, dans le cadre de notre travail. Lobjectif

Prface des auteurs

nest pas de vous transformer en grands gourous de MVVM, mais de vous


permettre dy voir plus clair dans les diffrentes notions, les diffrentes
faons de procder, etc. terme, il vous sera plus facile de savoir par o
dmarrer votre projet, quelles techniques vous allez utiliser (ou recommander) et surtout la raison de vos choix!

Prrequis et public
Cet ouvrage sadresse aux personnes soucieuses den savoir plus sur ce qui
tend devenir le pattern de rfrence, lorsque lon parle de dveloppement
dapplications WPF, Silverlight ou Windows Phone. Que vous soyez dveloppeur, architecte ou mme chef de projet, ce livre vous permettra de savoir
tout ce dont vous avez besoin!
Sa lecture vous prsentera bien sr les informations techniques ncessaires
la mise en place de MVVM dans un projet, mais il apporte aussi les connaissances thoriques sur ce pattern.
Dun point de vue technique, des notions en programmation oriente objet
sont ncessaires pour bien assimiler les exemples. Enfin, si vous connaissez
dj quelques design pattern, cest un grand plus!

Organisation de louvrage
2 2 Le chapitre 1, Prsentation du pattern MVVM,page 9, a pour objectif de
prsenter, succinctement, le pattern MVVM en dtaillant les diffrents
lments qui le compose.

2 2 Le chapitre 2, Les diffrents lments et leurs rles,page 22, met laccent sur
ces fameux lments de faon thorique, afin de dterminer clairement
quels sont leur rle, permettant ainsi au lecteur de bien comprendre
leur importance.

2 2 Afin de bien comprendre les diffrentes philosophies de dveloppe-

ment utilisables avec le pattern MVVM, le lecteur pourra se concentrer


sur la lecture du chapitre 3, Les diffrentes philosophies, page 42, qui lui

Prface des auteurs

expliquera la diffrence entre le View First, le ViewModel First et


le Model First.

2 2 Les chapitres 4 6 prsentent dun point de vue technique, dans le


dtail et avec des exemples simples, mais issus de la vie relle, la faon
dont chacun des composants ( savoir le modle, le ViewModel et la
vue) doivent tre construits et agencs pour pouvoir fonctionner
ensemble.

2 2 Le chapitre 7, dition de contrles personnaliss,page 244, permettra au


lecteur de connatre les techniques utiliser lorsquil souhaite dvelopper ses propres contrles, tout en faisant en sorte que ceux-ci soient
compatibles (et donc facilement utilisables) avec le pattern MVVM.

2 2 Enfin, parce quun dveloppement nest complet que si lon sest assur
quil ny a pas (ou peu) de bugs et afin de limiter les possibles rgressions au cours du dveloppement, le chapitre 8, MVVM et testabilit,
page 271, explique comment raliser les tests sur les diffrents lments,
chacun ayant ses propres particularits.

Les conventions utilises


Voici les conventions typographiques de cet ouvrage :
Italique
Met en exergue les termes nouveaux ou la signification des acronymes.
Police chasse fixe

Met en valeur les lments de code dans le texte.


Des notes veillent votre attention sur des points prcis.

Le texte ainsi signal vous met en garde.

Prface des auteurs

propos des auteurs


Jonathan Antoine
Architecte/Consultant/Formateur, Jonathan est un passionn dinformatique
en gnral et il sintresse plus particulirement toutes les problmatiques
dinterfaces homme-machine dites naturelles . Ses travaux professionnels et personnels sont bass sur le framework WPF, Silverlight et Windows
Phone. Il est de mmereconnu Microsoft MVP dans la catgorie Client Application
Development (https://mvp.support.microsoft.com/profile/Jonathan.ANTOINE).
Depuis quelques annes, il essaye de communiquer au mieux sa passion au
travers de la cration et gestion du site http://wpf-france.fr/, son blog en anglais
www.jonathanantoine.com, ainsi que par son rle de modrateur sur le site developpez.
com.

Thomas Lebrun
Architecte/Dveloppeur chez Infinite Square, Thomas est expert sur les technologies WPF, Silverlight et Windows Phone. Il sintresse plus particulirement lenrichissement de lexprience utilisateur, ainsi qu la mise en place
darchitecture logicielle. Son implication dans la communaut, au travers de
confrences, articles, livres, etc., lui vaut le titre de Microsoft MVP depuis
cinq ans dans la catgorie Client Application Development (https://mvp.support.microsoft.com/
profile=FF4FF146-E963-4665-9785-B84B6045E86D).

propos des relecteurs


Arnaud Auroux
Architecte/Dveloppeur .Net chez la socit Infinite Square. Arnaud est
spcialis dans le dveloppement dapplications riches (Silverlight, WPF et

Prface des auteurs

Windows Phone). Il sintresse galement aux technologies de golocalisation et de synchronisation (Bing maps, Sync Framework).
Arnaud intervient sur la ralisation de projets autour de ces technologies.
Il est charg de la mise en place de larchitecture logicielle, ainsi que des
bonnes pratiques de dveloppement. Et parce que larchitecture est un sujet
complexe traiter, la vision et lexprience de chacun apportant une analyse
diffrente du sujet, il a accompagn Thomas et Jonathan dans la relecture
de leur ouvrage afin de leur offrir un il extrieur sur la mise en pratique du
modle MVVM.

David Catuhe
Responsable des relations techniques avec les dveloppeurs chez Microsoft,
David est expert sur les technologies en rapport avec linterface utilisateur
(WPF/Silverlight/Html5/Xna/DirectX). Il est passionn par le dveloppement
logiciel depuis plus de 15 ans et affectionne tout particulirement les technologies en rapport avec la 3D (il a dans une vie passe dvelopp un moteur
3D temps rel en .Net). Ce passionn, fier dtre dveloppeur, se dfinit luimme comme un geek qui a fait de sa passion son mtier. Il a, tout au long de
sa carrire, expriment et vu de nombreuses approches pour architecturer
les dveloppements notamment dans le cadre de MVVM.

Julien Corioland
Consultant et formateur .NET chez Infinite Square, Julien est expert sur les
technologies WPF et Silverlight. Il se spcialise tout particulirement sur la
plateforme Windows Phone 7 laquelle il a consacr un ouvrage. Il travaille
au quotidien sur la ralisation de projets utilisant ces technologies et il a
apport au travers ses relectures un regard critique par sa vision de la mise en
place de MVVM sur de nombreux projets concrets dans la vraie vie.

Prface des auteurs

Lonard Labat
Stagiaire chez Infinite Square, Lonard est passionn par le dveloppement,
et particulirement les technologies Silverlight et Windows Phone, autour
desquelles il a cocrit un ouvrage aux ditions ENI. Il sest, ds les premiers
projets sur lesquels il a travaill, attel la mise en place de bonnes pratiques
et de patterns tels que MVVM.

Remerciements
Nous tenons remercier toutes les personnes qui nous ont apportes leur
soutien, que ce soit lors de lcriture ou la relecture de cet ouvrage. Parmi
ces personnes, nous remercions tout particulirement David Catuhe, Julien
Corioland, Arnaud Auroux et Lonard Labat ainsi que Simon Ferquel pour
leurs relectures et avis dexperts.
Finalement nous (enfin surtout Jonathan) remercions tout particulirement
Nomie Antoine pour son soutien indfectible et sa patience tout au long
de ces mois. Avoir une femme aussi parfaite nest pas donn tout le monde.

1
Prsentation du pattern
MVVM
Pattern de dveloppement de rfrence pour le dveloppement dapplications WPF, Silverlight et Windows Phone, le pattern MVVM (Model-ViewViewModel) est devenu un lment incontournable de la panoplie des dveloppeurs. Cependant, tous ne savent pas comment en utiliser toutes les
subtilits disponibles, de par sa jeunesse et son manque de spcifications
dtailles.
Au cours de ce chapitre, nous aborderons prcisment ce quest le pattern
MVVM, et nous ferons un rapide comparatif des diffrents patterns existants
qui ont abouti sa cration.

2
Les diffrents lments
et leurs rles
MVVM correspond au triptyque Model-View-ViewModel. Ce sont les trois
lments sur lesquels est bas le pattern. Voici une description succinctede
chacun:

2 2 Le modle de donnes (ou Model) correspond aux diffrentes entits


mtier utilises par lapplication.

2 2 La vue (ou View) correspond la reprsentation qui est faite de ces


donnes.

2 2 Le modle de la vue (ou ViewModel) correspond une reprsentation


abstraite de la vue. Il va aussi manipuler le modle de donnes.

2 Les diffrents lments et leurs rles

23

Figure 2-1 : Les diffrents lments du pattern MVVM

Comme nous avons pu le voir dans le chapitre prcdent, ce pattern a notamment pour objectif de faciliter au mieux le travail conjoint du dveloppeur
et du designer. Pour cela, il repose sur le concept de couplage faible entre la
vue et le ViewModel. On parle de couplage fort lorsque deux lments darchitecture logicielle sont lis et ne peuvent pas fonctionner indpendamment. Les briques de construction pour enfants sont des exemples concrets
du couplage fort: une pice de Lego ne peut simbriquer quavec une autre
pice de Lego et on ne peut pas en utiliser une dune autre marque.
Une solution ce problme est de crer des contrats fonctionnels : on ne
dfinit pas les diffrents lments par ce quils sont, mais par ce quils font ou
exposent. Dans notre cas, le ViewModel et la vue ne seront pas lis fortement
et ils pourront exister indpendamment lun de lautre. Ainsi, le dveloppeur
peut travailler sur le ViewModel sans avoir connatre la vue et le designer
peut travailler sur la vue sans avoir connatre le fonctionnement intrinsque
du ViewModel. La mme relation existe entre le modle de donnes et la vue.
Dans ce chapitre, nous allons dfinir plus prcisment ce que sont ces diffrents lments du pattern ainsi que leurs rles. Les diffrents moyens de
communication entre eux et les possibilits dimplmentation technique de
chacune de ces parties seront abordes dans les chapitres suivants.

3
Les diffrentes
philosophies
Il existe plusieurs faons dutiliser le pattern MVVM au sein de ces applications. Ces possibilits, que nous appellerons des philosophies , sont au
nombre de trois:

2 2 View First
2 2 ViewModel First
2 2 Model First
Chacune possde, bien sr, ses avantages et ses inconvnients que nous
allons tenter de dtailler tout au long de ce chapitre.
Avant daller plus loin, il est important de noter quil ny a pas une philosophie meilleure que les autres, il sagit simplement de trouver celle qui correspond le mieux aux besoins de lapplication en cours de dveloppement. De
plus, ne soyez pas surpris si, dans lun de vos dveloppements, vous utilisez
deux philosophies diffrentes: ce genre de choses se produit assez souvent

3 Les diffrentes philosophies

43

et reste en rapport direct avec le premier point : trouver la philosophie qui


correspond le mieux ce que vous souhaitez mettre en place dans votre
application.
Commenons par dfinir la notion de philosophie pour nous autres
dveloppeurs. Ce que nous appelons philosophie, cest tout simplement la
mthodologie utilise pour construire une application, en intgrant, au bon
moment, les diffrents acteurs, savoir les dveloppeurs, les designers, les
ergonomes, etc. Chacun dentre eux intervient un moment spcifique lors
du dveloppement et, par consquent, cela influence beaucoup le rsultat de lapplication finale (si le designer est pass trop tt, il risque dy avoir
des crans avec une charte graphique diffrente, si lergonome intervient
trop tard, il risque de demander refaire certains des crans, etc.). Lobjectif
final est de tenter de gagner en productivit, en vitant de refaire les choses
plusieurs fois.

3. 1. View

First

3. 1. 1. Dfinition
Dans une approche View First, cest la vue, autrement dit le code XAML, qui
contrle le flux de travail de lapplication, savoir la faon dont les diffrents
lments vont faire rfrence les uns par rapport aux autres.
La littrature anglo-saxonne parle aussi du View First comme de lapproche
Top Down, savoir du haut (la vue) vers le bas (le code et le modle). Il faut
le voir comme une vision en couches par rapport lutilisateur final: la vue
est ce quil voit directement car il interagit avec et il na pas connaissance du
code qui est sous le capot (instanciation et choix des ViewModels, etc.).

4
Construire la partie
modle
Le modle endosse plusieurs responsabilits et ce chapitre prsente les diffrentes faons de raliser son implmentation. Cette partie du pattern MVVM
est peut tre lune des moins couvertes car au premier abord il est facile de
penser quelle est identique celle utilise dans les prcdents patterns (MVP,
MVC, etc.). Il en est tout autrement en ralit : lutilisation des technologies
de liaisons rvolutionne la faon dont sont conus les objets mtier.
Dans un premier temps ce chapitre prsente larchitecture de la couche
modle, puis il explique comment dfinir le modle global et crer le modle
client. Enfin, il aborde les techniques possibles pour mettre en place une validation fonctionnelle des donnes ou encore permettre leur dition dune
faon plus conviviale pour lutilisateur.

4 Construire la partie modle

4. 1. Architecture

65

du modle de

donnes
La partie modle est base sur trois lments:

2 2 Le modle global, indpendant de la partie cliente et qui est utilis dans


le cadre inter-applicatifs.

2 2 Le modle client galement appel modle de prsentation entirement li lapplication cliente et qui rpond ses problmatiques.

2 2 Les services daccs aux donnes, prsents sur la partie cliente et faisant
le lien entre ces deux types de modle.
Seuls le modle client et les services daccs sont visibles par les
ViewModels et les vues. Le modle client est conu spcifiquement pour
rpondre aux diffrents besoins de la partie cliente (validation, dition,
gestion des tats, etc.). Il est intimement li aux ViewModels et aux vues :
il y a un couplage fort entre celui-ci et ces deux derniers. Il est tout fait
possible de sabstraire de ce lien au moyen dinterfaces, mais cela alourdit le
dveloppement et il est recommand de ne le faire que si cela est strictement
ncessaire.
La manire dont sont construits et instancis les objets du modle de prsentation peut tre complexe et il est important que cette complexit ne se
retrouve pas au sein des ViewModels qui nont pas cette vocation. Aussi, ce
travail est ralis au sein des services daccs aux donnes qui sont alors utiliss par les ViewModels. Les services sont les intermdiaires entre le monde
extrieur (cest--dire, l o sont stockes les donnes) et le monde
intrieur (cest--dire lapplication cliente). Ce sont eux qui implmentent la logique de conversion du modle global vers le modle client. Les
ViewModels nont ainsi aucun besoin de connatre le modle global puisquils
ne doivent et ne vont pas lutiliser. Cette faon de concevoir les services daccs aux donnes est ce que lon appelle le design pattern Repository.

5
Construire un ViewModel
Le ViewModel est la pierre angulaire du pattern MVVM et nous avons vu
prcdemment quelles taient ses diffrentes fonctions. Dans ce chapitre,
nous allons voir comment il peut remplir ces rles de faon concrte. Dans
la suite, nous allons vous prsenter une manire bien prcise de construire
un ViewModel. Sil existe bien sr dautres faons de faire, le cas tudi est
gnrique et applicable dans la majorit des situations rencontres dans un
contexte professionnel.
Comme vous pouvez vous en douter, il ny a pas un seul ViewModel, mais
plusieurs, qui sont utiliss conjointement ou indpendamment. Nous tudierons donc dans un premier temps larchitecture utilise pour construire les
ViewModels. Ensuite, nous rpondrons aux diffrentes problmatiques
relatives lexposition des donnes du modle et des diffrentes actions
possibles sur le ViewModel. Finalement, nous tudierons comment sont
effectues les communications entre plusieurs ViewModels.
Dans ce chapitre nous considrons que le lecteur possde une connaissance suffisante des diffrents concepts introduits dans les technologies de
construction dinterfaces riches telles que les liaisons de donnes (binding)

ou encore le systme de commandes.

5 Construire un ViewModel

5. 1. Architecture

121

et relations entre

les ViewModels
5. 1. 1. Classe
5. 1. 1. 1. Un

de base des ViewModels

objet .Net classique

Les ViewModels ne sont pas dun type particulier, au contraire des objets
.Net classiques. Cependant, ils vont tous tre utiliss dune faon bien prcise
au sein des vues : laide des liaisons de donnes ou Binding. Celles-ci fonctionnent conjointement avec linterface INotifyPropertyChanged dclarant uniquement lvnement PropertyChanged. Aussi, une classe de base
nomme ViewModelBase va tre mise en place et chaque ViewModel va en
driver afin de factoriser cette logique de notification des changements de
valeurs des proprits. Cette classe va tout simplement implmenter linterface INotifyPropertyChanged afin de permettre les liaisons de donnes.
/// <summary>
/// Classe de base pour tous les ViewModel
/// </summary>
public class ViewModelBase : INotifyPropertyChanged
{
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;

/// <summary>
/// Dclenche lvnement PropertyChanged pour une
/// proprit donne.
/// </summary>
/// <typeparam name=T></typeparam>
/// <param name=exp>Lexpression permettant
/// de retrouver la proprit.</param>
protected void RaisePropertyChanged<T>(Expression<Func<T>> exp)
{
var memberExpression = exp.Body as

MemberExpression;

6
Construire les vues
Les deux prcdents chapitres ont permis de dcrire de faon approfondie
les diffrentes manires dimplmenter les parties modle et ViewModel.
Cest donc sans surprise que ce chapitre va sintresser aux vues dans le cadre
du pattern MVVM.
Les vues sont les parties merges de liceberg quest une application riche.
En tant que telle cest aussi la partie qui va recevoir le plus dattention des
utilisateurs finaux. Le moindre dfaut visuel va tre remarqu immdiatement alors quun manque dans le modle ou les ViewModel ne sera connu,
pour ainsi dire, que des ralisateurs de lapplication. Afin dviter de glisser
sur cette patinoire, il est ncessaire de raliser la perfection cette couche
du pattern. Ceci est valable la fois dun point de vue esthtique et ergonomique, mais aussi dun point de vue technique pour permettre de faire
voluer facilement lapplication. Dans la suite du chapitre, nous nous intresserons plus au travail des dveloppeurs tout en indiquant les moyens
permettant de faciliter le travail dun graphiste et ou dun designer.
Dans un premier temps, une dfinition de ce que sont les vues sous un angle
technique sera donne. Larchitecture gnrale des diffrents lments

6 Construire les vues

167

constituant les vues sera ensuite prsente. partir de celle-ci nous tudierons comment les vues peuvent utiliser les ViewModels de faon simple et
comment elles vont rpondre des besoins un peu plus avancs. Finalement,
aprs avoir dcrit les utilisations du modle au sein des vues, des techniques
permettant la cration de vues sans ViewModel au moment de la conception
seront dcrites.

6. 1. Une

vue concrtement cest

quoi?
Dfinir quels sont les lments constitutifs dune vue et surtout o placer
le code correspondant est un terrain glissant. Cest en effet un sujet qui fait
souvent dbat lorsque lon aborde le pattern MVVM.
Tout comme son anctre Delphi, le framework .NET utilise de faon massive
des fichiers que lon appelle le code-behind pour reprsenter le code relatif
aux interfaces graphiques. Ceci est valable pour les technologies web (ASP,
ASP.NET), comme pour les technologies de clients lourds et lgers (WPF,
Silverlight, Windows Phone 7). Le concept est quune interface graphique
est subdivise en deux parties: une relative aux lments graphiques et leur
disposition et une autre relative la gestion des vnements et linteraction
avec les autres composants techniques de lapplication (les services daccs aux donnes et les ViewModels en particulier). Le code-behind est cette
deuxime partie : il est cach, labri, derrire les lments graphiques et
cest, en quelque sorte, lintelligence de la vue. La partie graphique, quant
elle, est reprsente dans notre cas dans le format XAML dans le fichier
homonyme. Dans Visual Studio, ces deux fichiers vont de pair, le code-behind
porte lextension .xaml.cs et le fichier XAML porte lextension.XAML.
Lillustration 6-1 prsente une transposition dans le monde rel de ces deux
fichiers.

7
dition de contrles
personnaliss
Les chapitres prcdents se sont attachs dcrire les trois parties du pattern
MVVM: le modle, le ViewModel et finalement la vue. Ce chapitre va quant
lui sattarder plus en profondeur sur la cration de contrles personnaliss
compatibles avec MVVM.
Ce sujet relve plus de la bonne connaissance du framework (WPF, Silverlight
ou Windows Phone) quuniquement de la bonne comprhension de ce
pattern. Cependant, les diffrentes rgles principales respecter pour faciliter lutilisation de contrles personnaliss dans le cadre de MVVM vont tre
prsentes.
Dans un premier temps, les bonnes pratiques seront prsentes de faon
thorique sous la forme de rappels. Elles seront ensuite illustres par un
exemple pratique : la cration dun contrle indiquant lutilisateur quun
traitement est en cours. Cet exemple permettra de prsenter un un les diffrents choix raliser ainsi que les lments nous ayant permis de les faire.

7 dition de contrles personnaliss

245

7. 1. Cration

de contrles
personnaliss

Comme cela a t indiqu prcdemment, cette partie se focalise sur les


diffrentes techniques utiles lors de la cration dun contrle personnalis.
Ce sont des techniques utilisables dans un projet nimplmentant pas le
pattern MVVM, mais les connatre et les implmenter est une bonne chose
car cela laisse une plus grande latitude aux utilisateurs des bibliothques de
contrles dveloppes. Ces derniers sont pour rappel utiliss par des dveloppeurs, cest--dire un public averti au fait des briques techniques mises en
place.

7. 1. 1. Bien

choisir la classe de base

La premire chose faire est de bien choisir la classe de base utiliser pour le
nouveau contrle raliser. En effet, en fonction de celle-ci plusieurs comportements dj prsents dans le framework pourront tre rutiliss sans dveloppement supplmentaire. Voici les diffrents contrles disponibles (tous
hritent de DependencyObject):

2 2 Control : cest la classe de base prsentant le moins de fonctionnalits par dfaut, mais cest aussi celle donnant le plus de libert. Les
lments suivants drivent tous de cette classe. Il faut donc la choisir
lorsquils ne rpondent pas aux besoins du contrle dvelopp.

2 2 ContentControl : cest la classe de base utiliser lorsque lon souhaite


afficher un contenu. Elle contient une proprit Content supplmentaire permettant de dfinir ce contenu, celui-ci pouvant tre un objet
mtier ou un contrle graphique.

2 2 HeaderedContentControl : cette classe diffre de la prcdente de par


la prsence de la proprit Header dfinissant un titre pour le contenu
affich.

8
MVVM et testabilit
Ce chapitre a pour objectif de dmontrer quelle est limportance des tests
dans lapplication du pattern MVVM, ainsi que la manire de les mettre en
pratique. Attention, tant donn quil ne sagit pas l dun livre sur la ralisation de tests, tous les points ne seront pas abords, mais uniquement ceux
qui font sens dans le cadre de lutilisation de MVVM.

8. 1. Limportance

des tests

Les tests reprsentent lun des points clef du dveloppement dapplications.


Cela est valable aussi bien pour les technologies WPF, Silverlight, Windows
Phone, que pour les autres types de dveloppements (Web, etc.). Lun des
principaux objectifs (et intrts) dimplmenter le pattern MVVM concerne la
simplicit quil offre pour raliser des tests au sein de vos applications.
Il faut savoir quil existe trois grandes catgories de tests que lon peut utiliser (ou non, cela reste dterminer) dans nos dveloppements. Nous allons
donc dtailler un peu plus ces trois grandes familles, afin que vous puissiez

8 MVVM et testabilit

272

mieux vous rendre compte de quel type de tests nous parlons lorsque nous
les aborderons dans le cadre de MVVM.

8. 1. 1. Les

tests fonctionnels

Les tests fonctionnels sont excuts par des personnes qui ne sont pas des
techniciens et dont le rle est de sassurer que les fonctionnalits de lapplication ont correctement t implmentes dun point de vue mtier. Ainsi,
cest le rle des testeurs fonctionnels de vrifier que lorsque lutilisateur va
cliquer sur un bouton, une grille sera correctement remplie (avec les bonnes
donnes) et quune bote de dialogue sera bien propose lutilisateur.
En cas dchec dun test fonctionnel, il nest pas de leur responsabilit de
savoir pourquoi les donnes remontes ou affiches ne sont pas correctes:
ils se contentent de drouler un scnario de tests, deffectuer des tests de
non-rgression et dindiquer si le test sest correctement droul ou non.
Les tests de non-rgression permettent, entre deux versions dune application, de sassurer que les fonctionnalits prsentes dans la V1 sont
toujours prsentes dans la V2 et quelles fonctionnent sans problmes.

Les tests fonctionnels sont donc trs pratiques et permettent aux testeurs/
dveloppeurs de se mettre, lespace dun instant, la place de lutilisateur
final, afin de pouvoir se rendre compte des points forts, des points faibles,
etc., de lapplication. Cest dailleurs bien souvent un utilisateur final qui
effectue ces tests car cest lui qui a bien souvent la meilleure connaissance
des besoins de lapplication.

8. 1. 2. Les

tests unitaires

Les tests unitaires vont permettre aux dveloppeurs de sassurer de la cohrence des donnes prsentes dans lapplication. Alors que le testeur fonctionnel a pu remarquer que les donnes remontes ne sont pas correctes (pas
le bon nombre denregistrements, etc.), cest au dveloppeur, avec ses tests
unitaires, de vrifier et comprendre do provient cette inexactitude.

9
Glossaire
Binding
En franais liaison , un binding correspond un lment frquemment
utilis dans les frameworks WPF et Silverlight. Il permet de synchroniser la
valeur des proprits de deux objets : la source et la cible. Il dfinit un lien
entre ces deux lments sans ncessairement que ceux-ci ne se connaissent:
on parle alors de couplage faible.

Contrle
Un contrle est un lment graphique rutilisable dans une interface
graphique. Le framework .Net en fournit toute une panoplie, tels que les
champs textes, les images, etc., mais il est tout fait possible den crer de
nouveaux. Une vue dune application est ainsi compose de ces contrles
disposs les uns cts des autres.

Design Pattern

On appelle Design Pattern un patron de conception, cest--dire une solution de gnie logiciel permettant de rsoudre un problme rcurrent dans le
cadre de la programmation. Un Design Pattern peut tre considr comme
une recette de cuisine.

9 Glossaire

290

Injection de dpendances
Linjection de dpendances est un mcanisme permettant de mettre en
place linversion de contrle. Cela consiste fournir les dpendances entres
les diffrentes classes par rapport un fichier de configuration ou suivant
certaines rgles de localisation. Les ressources sont fournies de lextrieur
vers le demandeur.

Localisateur de services
Le localisateur de services sutilise conjointement avec linjection de dpendances. Cest un mcanisme permettant dobtenir une ressource. la diffrence de linjection de dpendances, cest le demandeur qui rclame explicitement ce dont il a besoin.

MVVM
Cest un acronyme anglais signifiant Model View Model. En lisant ce livre, vous
aurez une bonne ide de ce que cest concrtement.

Ressources
On dsigne par ressources tout objet disponible un moment donn dans
un programme. Dans les frameworks WPF et Silverlight ce sont la plupart du
temps des images, des pinceaux (Brush) ou encore des classes spcialises
(Converter, etc.).

Test unitaire
Cest un procd informatique permettant de sassurer du bon fonctionnement dun extrait de code. Il est appel unitaire car il permet de vrifier une
unit de code consistant en le plus petit lment de spcification vrifier.

XAML
Signifiant eXtensible Application Markup Language, le XAML est un langage
dclaratif bas sur XML permettant de dfinir une interface graphique WPF
ou Silverlight.

Index
A

Actions 148. Voir aussiCommandes


exposer 149

BeginEdit 113

Actions de lutilisateur 201

Bindings 73, 168, 289


avanc 217
lier une collection 197
sur SelectedItems 217
utilisation 193

Behaviors Blend 154, 207

Afficher
contenu 245
informations de validation 222
liste dlments 246
modle au sein des vues 27

Blendabilit 47

Annuler laction de lapplication 265

BooleanToVisibilityConverter 199

Appels asynchrones 95

Bouchons (tests) 280

Approches de MVVM 42

Bubbling 248

Architecture des vues 171

ButtonBase 202

Assembly 83
Assert 284

AsyncReponse 98

Caliburn 10

Attached Behavior 211

CaliburnMicro 17

AutoEdit 276

CallMethodAction 207

AutoMapper 77

CancelEdit 113
CanExecute 149, 202
CanExecuteChanged 149

Index

Cast 126

Contrats fonctionnels 23, 83

CategoriesListViewModel 137

Control 245

ChargerItems 277

Contrles 289
choix 35
de mise en attente 256

Cinch 17
ClassCleanup 278
Classe de base du modle client 72
ClassInitialize 277
Code-behind 15, 45, 167
utilit 169
Coded UI Test 285
Collections
mise en forme 231
synchronisation 221
CollectionViewSource 143
Command 94, 201, 202
Commandes 149. Voir aussiActions
classiques 254
exemple concret 153
implmenter 150
routes 251
sur des contrles graphiques classiques 202
systme 148
amliorer 155
CommandParameter 202
CommandTarget 202
Communication entre ViewModels 156
exemple concret 162
Composition 127
Construire les vues 166243
Construire un ViewModel 120

Contrles personnaliss 244270.


Voir aussiCommandes
classe de base 245
crer 245
vnements 248
exemple 256
fichiers 246
implmenter 267
proprits 247
rendu visuel 254
Controller
MVC 12
Convert 228
ConvertBack 228
Converters 193
conversion de donnes 200
formatage de donnes 201
utiliser 199
Couplage faible 23
Crer le modle client 72
CRUD 60
CurrentItem 147
CustomControl 35

D
Data-Centric 60
DataContext 45, 180

ContentControl 245

DataTemplate 183
implicites 61

ContentPresenter 259

DataTriggers 232

Cider 238

292

Index

d:DataContext 238

EntityFramework 71, 86

d:DesignData 239

Enum 225

d:DesignInstance 239

EnumToDescriptionConverter 226

Dclencheur 207

Ergonomie 44

Dfinir le modle
client 75
global 68
hritage 71

Erreurs transverses 112

Delegate 248
DeliverEvent 215
DependencyObject 122
Design 45
Design Pattern 289
Design time 47, 238
Dveloppement 44
Dictionnaires 230
Donnes
de tests 241
exposer 136
filtrer 142, 144
grouper 145
trier 146
DoubleClicTrigger 209
DynamicResource 173

E
crans
fonctionnels 181
prdfinis dinteraction 186

vnements
classiques 250
contrles personnaliss 248
coute 209
faibles 215
routs 248
EventArgs 248
EventManager 249
EventTrigger 207, 209
EventTriggerBase<T> 209
Execute 149
Exposer
le modle 137
les diffrentes entits 136
une action 149
Expression Blend 208

F
Fentres de dialogue 186
Filter 144
FindName 255
Fowler, Martin 10
Frameworks 16

dition des donnes 113

lments du pattern 23

Garbage collector 160

Empreinte mmoire de lapplication 177

Gossman, John 11

Encapsulation 138

GoToState 236

EndEdit 113

293

Index

Gresh, Marlon 159


GroupDescription 145

H
HeaderedContentControl 245, 258
Hritage de ViewModels 124
Hyperlink 202

294

Interaction avec lutilisateur 186


confirmation 187
contrle dattente 256
message 187
valider, annuler 187
Interfaces
dfinir 83
graphiques
tests 273
ractives 232

ICategorieService 277

internal 250

ICollectionView 143
ICommand 149, 150

Inversion de Contrle 124, 133


solutions 134

ICommandSource 201

IoC 52

IDataErrorInfo 101, 112

IsDesignTimeCreatable 239

Identifiant unique de lenfant


vers le parent 71

IServiceBase<> 84

IEditableObject 113

ItemsControls 246

IList<> 85

ItemsSyncher 218

IMedia 71

ItemSyncher 220

IMessenger 160

IValueConverter 199

IMultiValueConverter 199
Indexer 230

IsSynchronizedWithCurrentItem 197

InitialisationDesServices 277

KeyDownManager 215

Injection de dpendances 52,


132, 134, 290

Injection par constructeur 53

Liaisons de donnes. VoirBindings

INotifyCollectionChangedWeakEventManager 218

LocalCanExecuteEvent 155

INotifyPropertyChanged 73, 121

Localisateur de services 66, 290


mise en place 134

InputBinding 202

Localisation de services 134

InputsBindings 203

Logique fonctionnelle 263

Instances de donnes 239

Index

MainViewModel 129, 180


Mapper 76
Mapping 76
avantages et inconvnients 77
MarkupExtension 238
Mdiateur 158
Mdiator 158
Mmoire 177
fuites 214
MenuItem 202
MergedDictionnaries 174
MessageToActionsMap 161
Messenger 160
Microsoft Expression Blend 238
Mock 280
Model 22

Modle
acteurs 27
client 25, 65
classe de base 72
crer 72
dfinir 75
valeurs 113
client/consommateur 194
construire 64119
de donnes 22, 24, 65
rle 24
de la vue 22
de prsentation 25
exposer 137
global 65
dfinir 68
tests 274
utilisation par

la vue 26
le ViewModel 26
utiliser 222
Model First 59
avantages 61
dfinition 59
implmenter 59
inconvnients 61
type dapplications 60
Modlisation de la vue 36
Model-View-Controller 11
Model-View-Presenter 13
Model-View-ViewModel 9
MoveCurrentTo 147
MoveCurrentToFirst 147
MoveCurrentToNext 147
MoveCurrentToPrevious 147
Multi-threading 134
MVC 11
MVP 13
MVVM 290
appliquer 42
approches 42
choisir 62
avantages et particularits 38
code-behind 15
contrles, choix 35
lments 23
fonctionnalits 18
frameworks 16
objectifs du projet 14
philosophies 42
choisir 62
prrequis 19
prsentation 921
MVVM Light Toolkit 17

295

Index

Namespace XML 267

Ramora 210
avantages 211
implmenter 212

NInject 52

Rapid Application Development 60

Ragir aux actions de lutilisateur 201

Objets
appeler une mthode sur 207
mtiers
reprsentation 183
OnApplyTemplate 254, 264
OneTime 193
OneWay 193
OneWayToSource 193

Rgression 273
RelayCommand 150
Repository 83
Reprsentations graphiques du
modle de prsentation 183
ResourceDictionary 173
Ressources graphiques 290
emplacement 174
transverses 172
types de 173

Passive View 14

RoutedEvent 249

Philosophies 42

RoutedEventArgs 248

Plain Old CLR Object 69

Runtime 47

POCO 69
Presentation Model 10

Presenter 13, 31

SelectedItem 217

Prism 17

SelectedItemsSyncher 218

PropertyChanged 81, 121

SelectionChangedWeakventManager 218

PropertyChanging 73

service daffichage 186

Proprits de dpendance
contrles personnaliss 247

ServiceLocator 134, 136, 137, 277

R
RAD 60
RadioButton 202
RaisePropertyChanged 73
Ramasse-miettes 161

Rgles mtier 110

Services daccs aux donnes 65, 140


abstraction 83
blocage de laffichage 96
concevoir 83
implmenter 86
sous la forme dinterfaces 66
Unit Of Work 93
ShellViewModel 129

296

Index

297

avec Silverlight 281


avec WPF 275
vues 285

Silverlight 281
Silverlight Test Class 282

SortDescriptions 146

Tests unitaires 290


erreur (Silverlight) 285
exception 277
View First 50

Spring 52

ThreadPool 98

StartListening 215

Thread UI 95

StaticResource 173

ToggleButton 202

StopListening 215

Top Down 43

String.Empty 81
Supervising Controller 14

Transitions
avec animations 233
sans animation 232

SynchronizationContext 97

Trigger 207

System.ComponentModel.
DataAnnotations 104

TryValidateProperty 106

Systme de commandes 148


amliorer 155

TwoWay 193

TabControl 179
TestClass 284

Unit Of Work 92
implmenter dans les services 93

TestCleanup 278

Unity 52

TestInitialize 278

UserControl 35, 188

Smalltlak 11
Smith, Josh 159

Suivre llment courant 146

TestMethod 284
Tests 271
de non-rgression 272
fonctionnels 272
interfaces graphiques 273
Modle 274
unitaires 272
bouchons 280
initialiser 276
ViewModel 275

Tunneling 248
Types particuliers 225

V
Valeurs du modle client 113
Valeurs numres 225
ValidatesOnDataErrors 222
Validation des donnes 100
fonctionnelle 110
format 101
types de 100

Silverlight Unit Test Application 282

Index

298

archirecture 171
catgories 172
construire 166243
dfinition 167
matre/dtails 182
manipulable en XAML 48
naviguer entre 58
rles 30
sans ViewModel concret 238
ViewModel et 31

Validation.HasError 223
Validation, informations de 222
Validator 106
View 22
View First 43
avantages 48
dfinition 43
implmenter 45
inconvnients 49
instanciation des objets 44
tests unitaires 50
ViewModel 22, 36
acteurs 40
architecture et relation 121
classe de base 121
communication 156
construire 120
fonctionnalits 129
hritage 124
rles 36
utilisation simple 193
ViewModelBase 121
ViewModel First 51
avantages 56
dfinition 51
implmenter 52
inconvnients 56
type dapplications 58
ViewModelLocator 46, 177
alternative 47
VisualStateManager 234

W
WeakAction 161
WeakEventListener 215
WeakEventManager 215
WeakEvents 215
WeakReference 161
Web Forms 21
Window 188
Windows Forms 20
Windows Phone
tests 274
Workarounds 62
WPF
tests 275
Wrapping 80
avantages 80
inconvnients 80

X
XAML 45, 168, 290

Visual Studio 2010


tests 273

x:Code 170

Visual Studio LightSwitch 59

x:Key 173

Vues 22, 2830


acteurs 33

x:Shared 48

You might also like