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

La raison pour laquelle je demande ceci est parce que j'ai été recommandé par @ Greg D (de cette question ) pour utiliser SetCurrentValue() à la place, mais un regard sur les docs et n'a pas vu quelle est la différence. Ou que signifie" sans changer sa source de valeur"?

SetValue()

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

SetCurrentValue()

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

43
demandé sur Cœur 2010-11-20 04:11:50

2 réponses

Le lien MSDN que vous avez fourni le dit assez 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 désactivation d'une application déclarée l'utilisation de la propriété. Le La méthode SetCurrentValue modifie valeur effective du bien, mais déclencheurs existants, liaisons de données et les styles continueront à fonctionner.

Supposons que vous écrivez le contrôle TextBox et que vous avez exposé une propriété Text que les gens utilisent souvent comme suit:

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

Dans le code de votre contrôle, si vous appelez SetValue vous remplacer la liaison avec tout ce que vous fournissez. Si vous appelez SetCurrentValue, cependant, vous vous assurerez que la propriété prend la valeur donnée, mais ne détruira aucune liaison.

À ma connaissance, le Conseil de Greg est incorrect. Vous devriez toujours utiliser GetValue/SetValue de votre propriété CLR wrapper. SetCurrentValue est plus utile dans les scénarios où vous avez besoin d'une propriété pour prendre une valeur donnée mais vous ne voulez pas écraser les liaisons, les déclencheurs ou les styles qui ont été configurés par rapport à votre propriété.

49
répondu Kent Boogaart 2011-09-27 15:05:36

Suite à la réponse acceptée:

J'ai trouvé que ce post explique assez bien SetCurrentValue (). Notez comment le système de priorité de valeur de propriété de dépendance prendra une valeur locale sur une valeur liée. Ce qui explique le comportement inattendu des commentateurs.

2
répondu johnDisplayClass 2014-03-18 16:50:16