The MSDN link you provided says it quite well:
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.
Suppose you’re writing the TextBox
control and you’ve exposed a Text
property that people often use as follows:
<TextBox Text="{Binding SomeProperty}"/>
In your control’s code, if you call SetValue
you will overwrite the binding with whatever you provide. If you call SetCurrentValue
, however, will ensure that the property takes on the given value, but won’t destroy any bindings.
To the best of my knowledge, Greg’s advice is incorrect. You should always use GetValue
/SetValue
from your CLR wrapper property. SetCurrentValue
is more useful in scenarios where you need a property to take on a given value but don’t want to overwrite any bindings, triggers, or styles that have been configured against your property.