58 votes

Supprimer la liaison dans WPF en utilisant le code

J'aimerais utiliser la liaison de données lors de l'affichage de données dans une boîte de texte. En gros, je fais comme ça :

 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 de désactiver la liaison. Je vais appeler cette méthode avec de nombreux objets différents, mais la TextBox restera la même. Existe-t-il un moyen de supprimer la liaison précédente ou cela se fait-il automatiquement lorsque je définis la nouvelle liaison ?

91voto

Ed Ball Points 1341

Alternativement :

BindingOperations.ClearBinding(txtName, TextBox.TextProperty)

1 votes

Visual Basic ne résoudra pas l'appel .SetBinding(..., Nothing) car les deux signatures prennent des types Reference (un String, et un BindingBase). J'aime mieux cela.

4 votes

La méthode ClearBinding n'existe pas dans Silverlight 3. stackoverflow.com/questions/1639219/

0 votes

@BobKing cast it ( Nothing ) sur le type souhaité.

49voto

Pop Catalin Points 25033

Lorsque disponible

BindingOperations.ClearBinding(txtName, TextBox.TextProperty)

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

txtName.SetBinding(TextBox.TextProperty, null);

Fonctionnalités de C# 6.0 activées

this.btnFinish.ClearBinding(ButtonBase.CommandProperty);

0 votes

Je soupçonnais que la fixation précédente était supprimée lors de l'établissement d'une nouvelle fixation, car je n'ai pas trouvé d'informations sur la manière de procéder. Merci !

3 votes

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

2 votes

@Simon, lorsque l'appel est ambigu, vous pouvez toujours convertir la valeur nulle dans le type souhaité pour résoudre l'ambiguïté ;) IE : (Binding)null

19voto

Arcturus Points 14366

Pourquoi pas :

this.ClearValue(TextBox.TextProperty);

C'est beaucoup plus propre je pense ;)

3 votes

La documentation sur cette méthode n'est pas très claire. Elle donne l'impression qu'elle efface uniquement la valeur, et non la liaison. Mais en pratique, cela semble fonctionner.

6 votes

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

0voto

Bodekaer Points 73

Que diriez-vous de juste

txtName.Text = txtName.Text;

Vous devriez de toute façon définir la valeur après l'avoir effacée. Cela fonctionne dans SL4 au moins.

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