Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Thomas Lebrun

Tout sur WPF, LINQ, C# et .NET en général !

[WPF/Silverlight] Comment choisir entre INotifyPropertyChanged et DependencyProperty ?

Les DependencyProperty et l’interface INotifyPropertyChanged possède la même particularité: il s’agit de 2 mécanismes utilisés pour permettre à votre application de notifier l’interface graphique qu’une propriété a été modifiée.

Bien souvent, on peut se demander quelle technique il convient d’utiliser dans son développement. Il faut savoir qu’il n’y a pas de “véritable” réponse à ce genre de problèmatique, il s’agit plus d’un choix personnel Smile

Personnellement, je procède de la sorte: si la classe qui doit notifier l’interface graphique fait elle-même partie, d’une manière ou d’une autre, de l’IHM (par exemple, une propriété sur un custom control/user control), alors j’utilise une DependencyProperty. Dans le cas contraire, si ma classe est simplement utilisée pour représenter un objet métier, alors j’implémente l’interface INotifyPropertyChanged.

Un des points qui peut “justifier” ce choix, c’est que l’utilisation des DependencyProperty n’est possible qu’après avoir référencé WindowBase.dll (en WPF) ou System.Windows.dll (avec Silverlight). Certes, lorsque l’on travaille avec un seul projet, cela ne pose pas de problèmes mais dans le cas où l’on dispose d’une solution contenant divers projets (dont un pour vos objets métier), on peut-être tenté de minimiser au maximum les dépendances.

Et vous, quelle méthodologie employez-vous pour cette problématique ?

 

A+

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: mercredi 26 novembre 2008 10:49 par Thomas LEBRUN
Classé sous : , ,

Commentaires

RaptorXP a dit :

Personellement, je n'aime pas INotifyPropertyChanged parcequ'il oblige à écrire le nom de la propriété sous la forme d'une string. Si on renomme la propriété avec la fonction "Refactor" de VS, le code ne fonctionne plus si on oublie de changer aussi la string.

Et si le projet n'a vraiment aucun rapport avec de l'UI (donc aucune raison d'avoir une référence à WindowsBase), je crée juste un évènement fortement typé par propriété (NameChanged, PriceChanged par exemple).

# novembre 26, 2008 11:31

NeuroCypher a dit :

pas mieux.

# novembre 26, 2008 11:32

Thomas LEBRUN a dit :

Je suis d'accord avec le fait qu'écrire la nom de la propriété sous forme de chaîne de caractères, c'est pas le mieux c'est pourquoi je vous conseille de jeter un oeil ici: http://codingly.com/2008/09/30/inotifypropertychanged-sans-les-strings-ca-vous-dit/ ou du coté AOP: http://codingly.com/2008/10/29/utiliser-laop-avec-postsharp-pour-implementer-inotifypropertychanged/

# novembre 26, 2008 11:39

simon ferquel a dit :

Petit truc à prendre en compte : DependencyObject n'est pas ThreadSafe, et les DependencyProperties ne peuvent pas être modifiées en dehors du thread de création de l'objet. Ca peut poser des problèmes lorsque l'on fait de la validation de graphes d'objets complexes par exemple, ou implémenter du parrallèlisme consommant ces objets.

# novembre 26, 2008 14:37

Fabrice a dit :

Au début, j'utilisais les DependencyProperties, car ça me semblait être LA solution apportée par Microsoft pour gérer automatiquement un tas de choses qu'on doit réimplémenter sans. Malheureusement, j'ai été déçu par les DependencyProperties et je me rabat maintenant sur INotifyPropertyChanged.

Un des problèmes majeur est qu'en Silverlight, il n'y pas le support... des notifications des changements sur DependencyProperty ! Ca aide pas pour avoir du code partagé entre Silverlight et WPF (les modèles de présentations notamment).

# janvier 30, 2009 23:20
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- [Refactoring] ReSharper pour Visual Studio 2010 (Preview) par Thomas Jaskula le il y a 11 heures et 0 minutes

- [Refactoring] Analyser vos exceptions avec ReSharper Exceptional par Thomas Jaskula le il y a 12 heures et 14 minutes

- SharePoint 2007 : patterns & practices SharePoint Guidance par Philippe Sentenac [MVP SharePoint] le 07-03-2009, 09:56

- [Visual Studio 2010] Les tests cases c’est bien, mais je vais devoir tout réécrire ? par Etienne Margraff le 07-03-2009, 09:00

- MVP[Gribouillon].AddYear par The Grib's Lair [Sébastien PICAMELOT - MVP SharePoint] le 07-03-2009, 08:45

- Clinique INSIA - Projet de fin d’Etudes (Silverlight 3 MVVM et OutOfBrowser, WCF, TFS) - Part 1 par David REI le 07-02-2009, 23:38

- C’est la crise ? Bah pourquoi cramer du budget pub alors ? par Nix's Blog le 07-02-2009, 15:31

- Soyons MVP ! par TheSaib .NET blog le 07-02-2009, 12:15

- SharePoint : Gestion des Erreurs 6398, 7076 et 6482 par Blog Technique de Romelard Fabrice le 07-02-2009, 11:53

- EF avec WPF par Matthieu MEZIL le 07-02-2009, 10:18