Simplifier l’écriture de INotifyPropertyChanged

Premier cas d’utilisation : Directement dans le ViewModel

La façon la plus simple et la plus rapide, mettre l’implémentation de l’interface INotifyPropertyChanged directement dans la classe du ViewModel, mais cette méthode devient rapidement source de répétition et de duplication du code.

Avantages / Inconvénients
+ Le plus simple
– Répétitif si on a beaucoup de ViewModel
– Duplication du code de l’implémentation
– Non maintenable
– On est obligé de mettre une chaîne de caractères pour nommer la propriété dans la méthode OnPropertyChanged()

Second cas d’utilisation : Dans une classe séparée dont le ViewModel va hériter

Ici l’implémentation est dans une classe à part et permet d’aller plus vite lors de la création d’un nouveau ViewModel. C’est aussi bien plus maintenable car si l’on souhaite améliorer le code de l’implémentation, on ne l’a modifie qu’à un seul endroit dans l’application.

Nous n’avons plus qu’à faire hériter notre ViewModel.

Avantages / Inconvénients
+ Simple à mettre en place
+ Implémentation non dumpliquée
+ Maintenable
– Cela pose problème si le ViewModel hérite d’une autre classe
– On est obligé de mettre une chaîne de caractères pour nommer la propriété dans la méthode OnPropertyChanged()

Amélioration de l’implémentation de l’interface INotifyPropertyChanged

Voici un exemple d’amélioration de l’implémentation de l’interface (qui n’a plus qu’à se faire dans une seule classe !), Il y a un point négatif commun entre les deux cas, la chaîne de caractères pour nommer la propriété dans la méthode OnPropertyChanged().
Il existe un attribut appelé CallerMemberName en C# qui permet de récupérer la chaîne de caractère de la propriété ou méthode qui l’appelle.

Pour l’occasion j’ai renommé la classe ViewModelBase en ViewModelNotify et la méthode s’appelle NotifyPropertyChanged() au lieu de OnPropertyChanged() (c’est l’implémentation que j’utilise dans mes projets).

Comme l’attribut s’occupe de récupérer le nom de la propriété, nous n’avons plus besoin de la spécifier (on peut toute de même le faire au cas où).

J’espère que ce petit tutoriel vous sera utile, et n’hésitez pas à laisser un commentaire si j’ai fais une erreur ou un oublis.
Have fun !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *