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 ?
Et qu'est-ce qu'un "bien rattaché" ?
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 ?
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 :)
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.
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 !
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.
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.
Bonjour @MattHamilton, merci pour votre réponse - mais que voulez-vous dire par "ils utilisent des méthodes d'aide sur DependencyObject" ?
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 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.