当控件来自DataTemplate时,BindingOperations.ClearBinding(...)不起作用

时间:2012-07-26 12:27:10

标签: c# .net wpf data-binding datatemplate

我有点卡在这个上面。清除不属于TextProperty的某些TextBox DataTemplate的绑定可以正常工作。但是当TextBoxDataTemplate的一部分时,清除绑定似乎是一个无操作,如下面的剪辑所示。即使在大概清除了绑定之后,监视值仍为true

enter image description here

这是设计的吗?如果没有,我做错了什么?

以下是ClearBinding(...)http://msdn.microsoft.com/en-us/library/system.windows.data.bindingoperations.clearbinding

的MSDN文档

2 个答案:

答案 0 :(得分:4)

我发现这个MSDN post涵盖了这个问题。虽然它似乎没有真正的解释而留下问题,但它确实提供了一种似乎工作得很好的解决方法。

我用一些虚拟值替换绑定来替换ClearBinding调用:

AssociatedObject.SetBinding(TextBox.TextProperty, "dummy");

现在看来,当控制不是来自DataTemplate时,这将会中断。因此,为了解决这个问题,以及TextBox来自DataTemplate以及其他问题,我现在就这样做了:

BindingOperations.ClearBinding(AssociatedObject, TextBox.TextProperty);
if (BindingOperations.IsDataBound(AssociatedObject, TextBox.TextProperty))
    AssociatedObject.SetBinding(TextBox.TextProperty, "dummy");

瞧,绑定被“切断”了,所以我的水印现在似乎工作得很好。

答案 1 :(得分:0)

不确定这是否可行(未尝试),但请尝试使用MSDN中摘录中所述的BindingOperations.ClearAllBindings()方法(请参阅下面MSDN 如何引用到数据模板):

  

清除绑定会删除绑定以使其值   依赖属性被改变为它本来没有的东西   绑定。该值可以是默认值,继承值,   或来自数据模板绑定的值。

     

要清除对象上所有可能属性的绑定,请使用   ClearAllBindings