142 votes

Qu'est-ce qu'une propriété de dépendance ?

Qu'est-ce qu'une propriété de dépendance dans .Net (en particulier dans le contexte de WPF). Quelle est la différence avec une propriété ordinaire ?

100voto

Jonathan Perry Points 666

La seule explication que j'ai trouvée utile et bien écrite est celle-ci : http://www.wpftutorial.net/dependencyproperties.html

Fondamentalement, les DependencyProperties diffèrent des propriétés ordinaires en ce sens qu'elles ne sont pas seulement des setters/getters pour les champs de la classe, mais qu'elles récupèrent leurs valeurs réelles de manière dynamique pendant l'exécution. Le site SetValue() des DP est assez simple et définit la valeur locale de la propriété à la valeur que vous lui avez donnée. Cependant, lorsque vous essayez de GetValue() à partir d'une DependencyProperty, il cherchera d'abord une valeur locale, si aucune n'est présente (ce qui est viable dans les DependencyProperties contrairement aux propriétés ordinaires), il continuera à remonter l'arbre logique de l'interface utilisateur jusqu'à ce qu'il trouve une telle valeur. Si le framework a atteint le sommet de l'arbre sans trouver de valeur locale, il utilisera alors une valeur par défaut prédéfinie comme valeur de la propriété.

Cette méthode permet aux DependencyProperties de consommer moins de mémoire que les propriétés ordinaires puisque seules les valeurs qui ont été explicitement définies par l'utilisateur seront stockées localement.

Et, comme mentionné ci-dessus, les DependencyProperties nous permettent également de nous lier à elles dans le code XAML et de définir des déclencheurs sur elles, ce qui n'est pas autorisé pour les propriétés ordinaires.

J'espère que j'ai réussi à dissiper certaines ambiguïtés :)

2 votes

Et qu'est-ce qu'un "bien rattaché" ?

16 votes

Une propriété attachée est une propriété qui n'appartient pas à l'élément actuel qui est déclaré, mais qui affecte un autre objet. Par exemple : Grid.Row="1" sur un Button le placera dans la rangée n°2 du parent. Grid (en raison du fait que les lignes sont basées sur des zéros), mais la méthode Row DependencyProperty appartient à la catégorie Grid objet.

2 votes

Quand vous avez dit DependencyProperties also allow us to bind to them in the XAML code and set triggers on them, which on regular properties is not allowed Vous vouliez dire que la liaison dans XAML et la mise en place de déclencheurs sont toutes deux interdites, ou que seule la mise en place de déclencheurs est autorisée. Merci pour le suivi et pour avoir aidé à rendre les choses plus claires !

92voto

Matt Hamilton Points 98268

Les propriétés de dépendance sont des propriétés de classes qui dérivent de DependencyObject, et elles sont spéciales dans la mesure où, plutôt que d'utiliser simplement un champ de sauvegarde pour stocker leur valeur, elles utilisent des méthodes d'aide sur DependencyObject.

Ce qu'il y a de mieux, c'est qu'ils intègrent toute la plomberie nécessaire à la liaison des données. Si vous liez quelque chose à eux, ils le notifieront quand ils changeront.

45 votes

Cela ne me dit toujours pas grand-chose sur ce que peut faire une propriété de dépendance, ni sur sa raison d'être. Vous ne mentionnez rien de leur propriété la plus précieuse, la résolution de valeur dans l'arbre des éléments.

1 votes

Bonjour @MattHamilton, merci pour votre réponse - mais que voulez-vous dire par "ils utilisent des méthodes d'aide sur DependencyObject" ?

2 votes

@BKSpurgeon DependencyObject possède certaines méthodes comme "SetValue" et "GetValue" que vous appelez pour enregistrer/lire la valeur d'une propriété de dépendance, plutôt que d'utiliser un champ de sauvegarde.

37voto

Ash M Points 804

http://techpunch.wordpress.com/2008/09/25/wpf-wf-what-is-a-dependency-property/ fournit une bonne explication des propriétés de dépendance dans le contexte de WF et WPF.

Un extrait :

Point clé - La valeur des propriétés de dépendance est résolue

L'objectif ultime d'une propriété de dépendance, comme de toute propriété, est de gérer l'état. Mais contrairement aux propriétés .Net normales, la valeur de la propriété locale n'est pas stockée dans une variable d'instance.

Au lieu de cela, les propriétés de dépendance sont enregistrées dans le cadre de propriété de dépendance, et la valeur de la propriété sous-jacente est résolue - ce qui signifie que la valeur est déterminée par le cadre de propriété de dépendance sur la base des règles définies par l'enregistrement de la propriété.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X