wpf – 依赖属性SetValue()和SetCurrentValue()之间的区别是什么

前端之家收集整理的这篇文章主要介绍了wpf – 依赖属性SetValue()和SetCurrentValue()之间的区别是什么前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我问这个问题的原因是因为我被@Greg D(从 this question)推荐使用SetCurrentValue(),而是看看文档,没有看到什么区别。或者什么“不改变其价值源”是什么意思?

SetValue()

设置依赖属性的本地值,由其依赖属性标识符指定。

SetCurrentValue()

设置依赖属性的值,而不更改其值源。

你提供的MSDN链接说得很好:

This method is used by a component
that programmatically sets the value
of one of its own properties without
disabling an application’s declared
use of the property. The
SetCurrentValue method changes the
effective value of the property,but
existing triggers,data bindings,and
styles will continue to work.

假设你正在编写TextBox控件,并且你暴露了一个人们经常使用的Text属性,如下所示:

<TextBox Text="{Binding SomeProperty}"/>

在控件的代码中,如果调用SetValue,您将使用提供的任何内容覆盖绑定。如果你调用SetCurrentValue,但是,将确保该属性接受给定的值,但不会销毁任何绑定。

据我所知,Greg的建议是不正确的。你应该总是使用GetValue / SetValue从你的CLR包装器属性。 SetCurrentValue在您需要属性来接受给定值但不想覆盖针对您的属性配置的任何绑定,触发器或样式的情况下更有用。

猜你在找的设计模式相关文章