2008-10-09 5 views
46

Vorrei utilizzare l'associazione dati durante la visualizzazione dei dati in un controllo TextBox. Fondamentalmente mi piace:Rimuovere il binding in WPF utilizzando il codice

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

Non riesco a trovare un modo per annullare l'associazione. Chiamerò questo metodo con molti oggetti diversi ma il TextBox rimarrà lo stesso. C'è un modo per rimuovere il binding precedente o è fatto automaticamente quando imposto il nuovo binding?

+0

potresti per favore cambiare la risposta accettata? –

risposta

32

Quando disponibili

BindingOperations.ClearBinding(txtName, TextBox.TextProperty) 

Per le versioni Silverlight anziani, ma non sono affidabili come dichiarato nei commenti:

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

Ho il sospetto che il binding precedente sia stato rimosso durante l'impostazione di un nuovo poiché non sono riuscito a trovare alcuna informazione su come farlo. Grazie! –

+3

Questo non funziona. SetBinding è sovraccarico e la chiamata diventa ambigua quando viene fornito null come secondo parametro –

+2

@Simon, quando la chiamata è ambigua è sempre possibile eseguire il cast del valore null sul tipo desiderato per risolvere l'ambiguità;) IE: (binding) null –

17

ne dite:

this.ClearValue(TextBox.TextProperty); 

E 'molto più pulito credo;)

+3

La documentazione su questo metodo non è molto chiara. Si legge come se cancellasse solo il valore, non il legame. Ma in pratica, sembra funzionare. –

+5

BindingOperations.ClearBinding() chiama questo metodo internamente. –

86

In alternativa:

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

Visual Basic non risolverà la chiamata .SetBinding (..., Nothing) poiché entrambe le firme assumono tipi di riferimento (una stringa e una BindingBase). Mi piace di più –

+4

Il metodo ClearBinding non esiste in Silverlight 3. http://stackoverflow.com/questions/1639219/clear-binding-in-silverlight-remove-data-binding-from-setbinding –

+0

@BobKing lo ha lanciato ('Nothing') a il tipo desiderato – ANeves

0

Come circa appena

txtName.Text = txtName.Text; 

Si dovrà impostare il valore di una volta cancellato in ogni modo. Questo funziona almeno in SL4.