2008-10-09 7 views
46

Ich möchte Datenbindung verwenden, wenn Daten in einer TextBox angezeigt werden. Ich mache im Grunde wie:Entfernen Sie Bindung in WPF mit Code

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

Ich kann nicht scheinen, eine Möglichkeit zu finden, die Bindung zu deaktivieren. Ich werde diese Methode mit vielen verschiedenen Objekten aufrufen, aber die TextBox bleibt gleich. Gibt es eine Möglichkeit, die vorherige Bindung zu entfernen, oder geschieht dies automatisch, wenn ich die neue Bindung einstelle?

+0

Könnten Sie bitte die angenommene Antwort ändern? –

Antwort

32

Wenn verfügbar

BindingOperations.ClearBinding(txtName, TextBox.TextProperty) 

Für ältere Silverlight-Versionen, aber nicht zuverlässig, wie in den Kommentaren angegeben:

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

Ich vermutete, dass die vorherige Bindung beim Setzen einer neuen entfernt wurde, da ich keine Informationen darüber finden konnte, wie das geht. Vielen Dank! –

+3

Dies funktioniert nicht. SetBinding ist überladen und der Aufruf wird mehrdeutig, wenn Null als zweiter Parameter angegeben wird –

+2

@Simon, wenn der Aufruf nicht eindeutig ist, können Sie den Nullwert immer auf den gewünschten Typ umwandeln, um die Mehrdeutigkeit zu lösen;) IE: (Binding) null –

17

Wie wäre:

this.ClearValue(TextBox.TextProperty); 

Es ist viel sauberer denke ich;)

+3

Die Dokumentation zu dieser Methode ist nicht sehr klar. Es liest sich, als würde es nur den Wert löschen, nicht die Bindung. In der Praxis scheint dies jedoch zu funktionieren. –

+5

BindingOperations.ClearBinding() ruft diese Methode intern auf. –

86

Alternativ:

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

Visual Basic löst den Aufruf von .SetBinding (..., Nothing) nicht auf, da beide Signaturen Referenztypen (eine Zeichenfolge und eine BindingBase) verwenden. Ich mag das besser. –

+4

ClearBinding-Methode existiert nicht in Silverlight 3. http://stackoverflow.com/questions/1639219/clear-binding-in-silverlight-remove-data-binding-from-setbinding –

+0

@BobKing es ('Nothing') umwandeln der gewünschte Typ. – ANeves

0

Wie wäre es nur

txtName.Text = txtName.Text; 

würden Sie müssen den Wert eingestellt, nachdem es sowieso zu löschen. Dies funktioniert zumindest in SL4.