使用代码删除WPF中的绑定

Rob*_*und 54 c# wpf

我想在TextBox中显示数据时使用数据绑定.我基本上是这样做的:

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

我似乎无法找到解除绑定的方法.我将使用许多不同的对象调用此方法,但TextBox将保持不变.有没有办法删除以前的绑定,还是在设置新绑定时自动完成?

Ed *_*all 90

交替:

BindingOperations.ClearBinding(txtName, TextBox.TextProperty)
Run Code Online (Sandbox Code Playgroud)

  • Silverlight 3中不存在ClearBinding方法.http://stackoverflow.com/questions/1639219/clear-binding-in-silverlight-remove-data-binding-from-setbinding (4认同)

Pop*_*lin 42

有空的时候

BindingOperations.ClearBinding(txtName, TextBox.TextProperty)
Run Code Online (Sandbox Code Playgroud)

对于较旧的SilverLight版本,但不如评论中所述可靠:

txtName.SetBinding(TextBox.TextProperty, null);
Run Code Online (Sandbox Code Playgroud)

启用了C#6.0功能

this.btnFinish.ClearBinding(ButtonBase.CommandProperty);
Run Code Online (Sandbox Code Playgroud)

  • 我用这个解决方案获得了ArgumentNullException(但显然并非总是如此) (4认同)
  • 这不起作用.当提供null作为第二个参数时,SetBinding被重载并且调用变得不明确 (3认同)
  • @Simon,当调用不明确时,你总是可以将null值转换为所需类型来解决歧义;)IE :(绑定)null (2认同)
  • @Pop,你的权利将起作用,但Eds接近下面是由框架提供,所以显然更可取 (2认同)

Arc*_*rus 19

怎么样:

this.ClearValue(TextBox.TextProperty);
Run Code Online (Sandbox Code Playgroud)

我认为它更干净;)

  • BindingOperations.ClearBinding()在内部调用此方法. (6认同)
  • 关于这种方法的文档不是很清楚.它读起来好像只是清除值,而不是绑定.但在实践中,这似乎是有效的. (3认同)