2008-10-09 9 views
46

Je souhaite utiliser la liaison de données lors de l'affichage des données dans un TextBox. Je fais fondamentalement comme:Suppression de la liaison dans WPF à l'aide du code

public void ShowRandomObject(IRandomObject randomObject) { 
     Binding binding = new Binding {Source = randomObject, Path = new PropertyPath("Name")}; 
     txtName.SetBinding(TextBox.TextProperty, binding); 
    } 

Je n'arrive pas à trouver un moyen d'annuler la liaison. J'appellerai cette méthode avec beaucoup d'objets différents mais le TextBox restera le même. Y at-il un moyen de supprimer la liaison précédente ou est-ce fait automatiquement lorsque je définis la nouvelle liaison?

+0

pourriez-vous s'il vous plaît changer la réponse acceptée? –

Répondre

32

Disponibilité

BindingOperations.ClearBinding(txtName, TextBox.TextProperty) 

Pour les versions plus anciennes SilverLight, mais pas fiable comme indiqué dans les commentaires:

txtName.SetBinding(TextBox.TextProperty, null); 
+0

Je soupçonnais que la liaison précédente a été supprimée lors de la définition d'un nouveau puisque je ne pouvais pas trouver d'informations sur la façon de le faire. Merci! –

+3

Cela ne fonctionne pas. SetBinding est surchargé et l'appel devient ambigu lorsque null est fourni comme deuxième paramètre –

+2

@Simon, lorsque l'appel est ambigu, vous pouvez toujours convertir la valeur nulle au type désiré pour résoudre l'ambiguïté;) IE: (Reliure) null –

17

Que diriez-vous:

this.ClearValue(TextBox.TextProperty); 

Il est beaucoup plus propre que je pense;)

+3

La documentation sur cette méthode n'est pas très claire. Il se lit comme si cela effacerait juste la valeur, pas la liaison. Mais en pratique, cela semble fonctionner. –

+5

BindingOperations.ClearBinding() appelle cette méthode en interne. –

86

Alternativement:

BindingOperations.ClearBinding(txtName, TextBox.TextProperty) 
+1

Visual Basic ne résout pas l'appel .SetBinding (..., Nothing) car les deux signatures prennent des types de référence (une chaîne et une BindingBase). J'aime mieux ça. –

+4

La méthode ClearBinding n'existe pas dans Silverlight 3. http://stackoverflow.com/questions/1639219/clear-binding-in-silverlight-remove-data-binding-from-setbinding –

+0

@BobKing l'a lancé ('Nothing') le type désiré. – ANeves

0

Que diriez-vous juste

txtName.Text = txtName.Text; 

Vous devrez définir la valeur après l'effacement de toute façon. Cela fonctionne dans SL4 au moins.

Questions connexes