2008-10-09 4 views
46

Я хотел бы использовать привязку данных при отображении данных в TextBox. Я в основном делаю:Удалить привязку в WPF с помощью кода

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

Я не могу найти способ снять привязку. Я буду называть этот метод множеством разных объектов, но TextBox останется прежним. Есть ли способ удалить предыдущую привязку или это делается автоматически, когда я устанавливаю новое связывание?

+0

не могли бы вы изменить принятый ответ? –

ответ

32

При наличии

BindingOperations.ClearBinding(txtName, TextBox.TextProperty) 

Для старых SilverLight версий, но не надежен, как указано в комментариях:

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

Я подозревал, что предыдущее связывание было удалено при установке нового, так как я не мог найти никакой информации о том, как это сделать. Благодаря! –

+3

Это не работает. SetBinding перегружается, и вызов становится неоднозначным, когда null предоставляется в качестве второго параметра –

+2

@Simon, когда вызов неоднозначен, вы всегда можете отбросить нулевое значение до нужного типа для решения двусмысленности;) IE: (Binding) null –

17

Как насчет:

this.ClearValue(TextBox.TextProperty); 

Это намного чище, я думаю;)

+3

Документация по этому методу не очень ясна. Он читается так, как будто он просто очистит значение, а не привязку. Но на практике это, похоже, работает. –

+5

BindingOperations.ClearBinding() вызывает этот метод внутренне. –

86

В качестве альтернативы:

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

Visual Basic не будет разрешать вызов .SetBinding (..., Nothing), потому что обе подписи используют типы ссылок (String и BindingBase). Мне это нравится лучше. –

+4

Метод ClearBinding не существует в Silverlight 3. http://stackoverflow.com/questions/1639219/clear-binding-in-silverlight-remove-data-binding-from-setbinding –

+0

@BobKing отбрасывает ('Nothing') на желаемого типа. – ANeves

0

Как насчет

txtName.Text = txtName.Text; 

Вы должны установить значение после очистки его в любом случае. Это работает, по крайней мере, в SL4.

Смежные вопросы