D'après un de vos commentaires :
il me semble bizarre que le modèle implémente INotifyPropertyChanged, qui me semble être une classe liée à l'interface utilisateur.
La notification de changement est utilisée dans toutes sortes de contextes, mais pas dans celui de l'interface utilisateur. Par exemple, vous pourriez vouloir attacher un morceau de code de diagnostic qui enregistre des changements spécifiques à un fichier de type TextWriter
. Ceci est facilement réalisable sans modification de l'objet de modèle sous-jacent si l'objet implémente la notification de changement.
Mais même dans une application où elle n'est utilisée que pour mettre à jour l'interface utilisateur, ce modèle est toujours pertinent. La notification des modifications étant gérée par le biais d'un événement, l'objet qui génère l'événement est découplé de l'objet qui le gère. Votre modèle ne sait pas, et n'a pas besoin de savoir, quel type d'interface utilisateur l'utilise. Il dit simplement : "En supposant qu'il y ait une interface utilisateur, je dois lui dire, quelle qu'elle soit, que la valeur de cette propriété vient de changer".
Pourquoi existe-t-il un modèle de vue ? Pourquoi ne pas simplement se lier directement au modèle ? En fait, vous puede il suffit de se lier directement au modèle s'il implémente la notification de changement. Dans beaucoup d'applications WPF simples, il n'est pas nécessaire d'avoir un modèle de vue séparé - vous pouvez simplement implémenter la notification de changement dans le modèle et l'appeler un jour. C'est lorsque vous devez découpler l'interface utilisateur de la logique métier sous-jacente et que vous commencez à vous préoccuper de savoir si vous violez ou non le principe de responsabilité unique que le besoin d'un modèle de vue se fait sentir.