C`est juste un appel à la propriété publique IsClassical. Vous pouvez vous demander pourquoi le formulaire ne suffit pas d`appeler directement cela-mais c`est l`essence de l`encapsulation que le modèle de présentation fournit. PmodAlbum décide de ce que la logique est d`activer ce champ, le fait qu`il est simplement basé sur une propriété est connu pour le modèle de présentation, mais pas à la vue. Afin de ne pas trop s`enliser dans les spécificités de l`application et de mieux se concentrer sur la façon dont le modèle de présentation (ou MVVM) et mate sont utilisés, je vais me concentrer sur le bloc de sous-compteur de l`interface utilisateur et la logique. Comme indiqué dans le diagramme de classes ci-dessous, les entités impliquées sont: la vue, SubCounterView; l`interface du modèle de vue, ISubCounterViewModel; et, une implémentation de l`interface du modèle de vue, SubCounterViewModel. Le diagramme montre également comment j`ai ajouté quelques interfaces unificatrices pour des vues et des modèles de vue et une classe de base pour des modèles de vue contenant certaines fonctionnalités courantes (plus de détails sur ce plus tard lors de l`explication des spécificités liées à la contrainte). Nous allons ensuite ajouter un bouton à la MainWindow et utiliser un Binding pour définir sa Command propriété pour être la commande dans notre modèle de vue. Comme on peut le voir dans le code et le diagramme de classes ci-dessus, la vue est liée à une interface de modèle de vue plutôt qu`à une classe concrète. Bien que cela puisse sembler inutilement verbeux, il apporte quelques avantages puissants.

Il permet différents modèles de vue, et donc une logique et un comportement différents, à utiliser avec la même vue (c.-à-d. inversion de contrôle). Il s`agit à la fois d`une exigence de code relativement commune et d`un mécanisme utile pour les activités telles que les tests. Il permet le cas éventuel d`un modèle de vue unique partagé entre plusieurs vues. Un avantage final (plus discutable) est qu`il encourage le promoteur à se concentrer uniquement sur la vue plutôt que d`être distrait par des détails comportementaux. Une décision particulière que vous devez effectuer avec la synchronisation dans le modèle de présentation est la classe qui doit contenir le code de synchronisation. Souvent, cette décision repose en grande partie sur le niveau désiré de couverture des tests et sur la mise en œuvre choisie du modèle de présentation. Si vous mettez la synchronisation dans la vue, elle ne sera pas ramassée par des tests sur le modèle de présentation. Si vous le mettez dans le modèle de présentation, vous ajoutez une dépendance à la vue dans le modèle de présentation, ce qui signifie plus de couplage et de stubbing. Vous pouvez ajouter un mappeur entre eux, mais ajoute encore plus de classes à coordonner. Lors de la décision de la mise en œuvre à utiliser, il est important de se rappeler que, bien que les défauts se produisent dans le code de synchronisation, ils sont généralement faciles à repérer et à corriger (sauf si vous utilisez la synchronisation à grains fins).