Pourquoi les DependencyProperties .Net WPF doivent-elles être des membres statiques de la classe

StackOverflow https://stackoverflow.com/questions/36682

  •  09-06-2019
  •  | 
  •  

Question

Apprendre WPF de nos jours.J'ai découvert quelque chose de nouveau aujourd'hui avec les propriétés de dépendance .Net.Ce qu'ils apportent à la table, c'est

  • Prise en charge des rappels (validation, modification, etc.)
  • Héritage de propriété
  • Propriétés attachées

entre autres.

Mais ma question ici est la suivante : pourquoi doivent-ils être déclarés comme statiques dans la classe conteneur ?La méthode recommandée consiste ensuite à leur ajouter la propriété « wrapper » d'instance.Pourquoi ?

modifier:@Matt, mais cela n'exige-t-il pas également que la valeur de la propriété soit également partagée entre les instances - à moins bien sûr qu'il s'agisse d'une valeur dérivée ?

Était-ce utile?

La solution

Je vois 2 raisons derrière cette exigence :

  1. Vous ne pouvez pas enregistrer deux fois le même DP.Pour respecter cette contrainte vous devez utiliser une variable statique, elle ne sera initialisée qu'une seule fois donc vous n'enregistrerez DP qu'une seule fois.
  2. DP doit être enregistré avant la création de toute instance de classe (qui utilise cette base de données)

Autres conseils

Les propriétés de dépendance sont statiques en raison d'une optimisation clé dans WPF :De nombreux contrôles dans WPF ont des dizaines, voire des centaines de propriétés.La plupart des propriétés de ces classes sont définies sur leur valeur par défaut.Si les DP étaient des propriétés d'instance, la mémoire devrait être allouée pour chaque propriété de chaque objet que vous créez.Étant donné que les DP sont statiques, WPF est libre de gérer plus efficacement l'utilisation de la mémoire de chaque propriété.

La raison pour laquelle vous devez fournir une valeur par défaut pour tout DP que vous enregistrez est que WPF veillera à ne pas allouer de mémoire supplémentaire à votre propriété lorsqu'elle est définie sur sa valeur par défaut, quel que soit le nombre d'objets contenant cette propriété que vous créez.

Je pense que la raison pour laquelle vous avez besoin de l'instance statique d'une propriété de dépendance est simplement parce que c'est ainsi qu'elle a été conçue.Le bit statique contient toutes les métadonnées de la propriété - sa valeur par défaut, son type de propriétaire (pratique s'il s'agit d'une propriété attachée), etc., ses méthodes de rappel lorsqu'elle change - ce genre de chose.Il est logique de stocker ces éléments de manière statique dans toutes les instances de la classe plutôt que par instance.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top