我有时想知道依赖属性的值是来自用户输入还是来自绑定源的更改.
我还没有找到一个干净的方法来确定这一点.
像DependencyPropertyHelper这样的东西,但据我所知,它对这种情况没有帮助.
场景:< TextBox Text =“{Binding Foo}”/>
找出它是否是最后更新文本的绑定源或目标.
或其他东西,是的我知道触发器,继承动画等.
最佳答案 是的,您可以获取与依赖项属性关联的绑定表达式并检查其状态:
BindingOperations.GetBindingExpressionBase(textBox, TextBox.TextProperty)?.Status ==
BindingStatus.Active
您可以将它与DependencyPropertyHelper结合使用,以检查当前源是否为BaseValueSource.Local.
ValueSource还有一个名为IsExpression的属性,当使用绑定或任何其他表达式(如DynamicResource或TemplateBinding)时,该属性设置为true.
查找当前值是来自源还是目标更难. AFAIK没有比这更好的方法了:
<TextBox Text="{Binding Path=Foo, NotifyOnSourceUpdated=True, NotifyOnTargetUpdated=True}"
SourceUpdated="OnSourceUpdated" TargetUpdated="OnTargetUpdated" />
然后,您可以连接处理程序OnSourceUpdated和OnTargetUpdated并应用一些逻辑.您还可以创建附加属性并更新它以获得更好的封装.