依赖属性SetValue()和SetCurrentValue()之间有什么区别
我之所以问这是因为我被@Greg D(从这个问题 )推荐使用SetCurrentValue()
来代替,但看看文档,并没有看到有什么区别。 或者“不改变其价值来源”是什么意思?
SetValue()
设置依赖项属性标识符指定的依赖项属性的本地值。
SetCurrentValue()
设置依赖项属性的值,而不更改其值的来源。
你提供的MSDN链接说得很好:
这个方法被一个组件使用,该组件使用编程的方式来设置它自己的一个属性的值,而不禁用应用程序声明的属性的使用。 SetCurrentValue方法更改属性的有效值,但现有的触发器,数据绑定和样式将继续工作。
假设您正在编写TextBox
控件,并且已经公开了人们经常使用的Text
属性,如下所示:
<TextBox Text="{Binding SomeProperty}"/>
在你的控件的代码中,如果你调用SetValue
你将会用你提供的任何东西来覆盖绑定。 但是,如果调用SetCurrentValue
,将确保该属性具有给定的值,但不会销毁任何绑定。
据我所知,格雷格的build议是不正确的。 您应该始终使用CLR包装器属性中的GetValue
/ SetValue
。 SetCurrentValue
在您需要属性接受给定值但不想覆盖已针对您的属性configuration的任何绑定,触发器或样式的情况下更有用。
除了被接受的答案:
我发现这篇文章很好地解释了SetCurrentValue()。 请注意,依赖属性值优先级系统将如何取超出绑定值的本地值。 这解释了评论者意想不到的行为。