有没有办法判断DependencyProperty的值是来自绑定源还是目标?

时间:2016-07-10 14:08:38

标签: wpf binding dependency-properties

我有时想知道依赖项属性的值是来自用户输入还是来自绑定源的更改。 我还没有找到一个干净的方法来确定这一点。

DependencyPropertyHelper之类的内容,但据我所知,它对这种情况没有帮助。

情景:<TextBox Text="{Binding Foo}" />

确定它是否是最后更新Text的绑定源或目标。 或者别的,是的,我知道触发器,继承动画等。

1 个答案:

答案 0 :(得分:2)

是的,您可以获取与依赖项属性关联的绑定表达式并检查其状态:

BindingOperations.GetBindingExpressionBase(textBox, TextBox.TextProperty)?.Status == 
    BindingStatus.Active

您可以将其与DependencyPropertyHelper结合使用,以检查当前来源是否为BaseValueSource.Local

ValueSource还有一个名为IsExpression的属性,在使用绑定或任何其他表达式时设置为true,例如DynamicResourceTemplateBinding

查找当前值是来自源还是目标更难。 AFAIK没有比这更好的方法了:

<TextBox Text="{Binding Path=Foo, NotifyOnSourceUpdated=True, NotifyOnTargetUpdated=True}"
         SourceUpdated="OnSourceUpdated" TargetUpdated="OnTargetUpdated" />

然后你可以连接处理程序OnSourceUpdatedOnTargetUpdated并应用一些逻辑。您还可以创建附加属性并更新它以获得更好的封装。