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"?
Définit la valeur locale d'une propriété de dépendance, spécifiée par son identificateur de propriété de dépendance.
Définit la valeur d'une propriété de dépendance sans modification de sa source de valeur.
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é.
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.