当控件来自DataTemplate时,BindingOperations.ClearBinding(...)无法正常工作

4
2个回答

4
我找到了这篇关于该问题的MSDN帖子。虽然它似乎没有给出真正的解释,但它提供了一个有效的解决方法。
我用一些虚拟值替换绑定来代替ClearBinding调用:
AssociatedObject.SetBinding(TextBox.TextProperty, "dummy");

现在看来,当控件不是来自DataTemplate时,这将会出现问题。因此,为了解决这个问题,并且可以涵盖来自DataTemplate和其他情况下的TextBox,我现在做了这个:

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

看,绑定已经"解除"了,所以我的水印现在似乎可以正常工作。


1

不确定这是否有效(未尝试),但请尝试使用BindingOperations.ClearAllBindings()方法,如MSDN中所述(请参见下面MSDN如何“引用”数据模板):

清除绑定会删除绑定,以便将依赖属性的值更改为没有绑定时的值。该值可以是默认值、继承值或来自数据模板绑定的值。

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


我会尝试它,因为它很容易完成,但我不明白这样做有什么不同。 - user610650

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接