我有点卡在这个上面。清除不属于TextProperty
的某些TextBox
DataTemplate
的绑定可以正常工作。但是当TextBox
是DataTemplate
的一部分时,清除绑定似乎是一个无操作,如下面的剪辑所示。即使在大概清除了绑定之后,监视值仍为true
:
这是设计的吗?如果没有,我做错了什么?
以下是ClearBinding(...)
:http://msdn.microsoft.com/en-us/library/system.windows.data.bindingoperations.clearbinding
答案 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
。