59 votes

Quelle est la différence entre les propriétés de dépendance SetValue () et SetCurrentValue ()

La raison pour laquelle je demande, c'est parce que j'ai été recommandé par @Greg D (de cette question) pour l'utiliser en SetCurrentValue() à la place, mais un coup d'oeil à la documentation et de ne pas voir à quoi la différence. Ou ce qui est fait", sans modification de la valeur de la source" signifie?

SetValue()

Définit la valeur locale d'une propriété de dépendance, spécifié par sa dépendance de l'identificateur de propriété.

SetCurrentValue()

Définit la valeur d'une propriété de dépendance sans changer sa valeur source.

68voto

Kent Boogaart Points 97432

La MSDN lien que vous avez fourni le dit très bien:

Cette méthode est utilisée par un composant programme définit la valeur de l'un de ses propres propriétés sans la désactivation d'une application déclaré l'utilisation de la propriété. L' SetCurrentValue méthode modifie le la valeur effective de la propriété, mais les déclencheurs existants, les liaisons de données, et les styles vont continuer à fonctionner.

Supposons que vous êtes en train de rédiger l' TextBox de contrôle et que vous avez exposé un Text bien que les gens utilisent souvent comme suit:

<TextBox Text="{Binding SomeProperty}"/>

Dans le code de votre contrôle, si vous appelez SetValue vous permettra de remplacer la liaison avec tout ce que vous fournissez. Si vous appelez SetCurrentValue, cependant, sera de s'assurer que la propriété prend la valeur donnée, mais ne les détruisent pas toutes les liaisons.

Au meilleur de ma connaissance, les conseils de Greg est incorrect. Vous devriez toujours utiliser GetValue/SetValue de votre CLR wrapper de la propriété. SetCurrentValue est plus utile dans le cas où vous avez besoin d'une propriété à prendre sur une valeur donnée, mais ne veulent pas remplacer les liaisons, les déclencheurs, ou des styles qui ont été configurés à l'encontre de votre propriété.

3voto

slightlyannoyed Points 74

Suite à la réponse acceptée:

J'ai trouvé que cet article explique assez bien SetCurrentValue (). Notez comment le système Dependency Property Value Precedence prendra une valeur locale sur une valeur liée. Ce qui explique le comportement inattendu des commentateurs.

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