Ответ 1
Указанная вами ссылка MSDN говорит об этом довольно хорошо:
Этот метод используется компонентом что программно устанавливает значение одного из своих свойств без отключение объявленного приложения использование имущества. Метод SetCurrentValue изменяет эффективная стоимость имущества, но существующие триггеры, привязки данных и стили будут продолжать работать.
Предположим, что вы пишете элемент управления TextBox
, и вы обнаружили свойство Text
, которое люди часто используют следующим образом:
<TextBox Text="{Binding SomeProperty}"/>
В вашем контрольном коде, если вы вызываете SetValue
, вы переписываете привязку тем, что вы предоставляете. Однако если вы вызываете SetCurrentValue
, убедитесь, что свойство принимает заданное значение, но не уничтожит никаких привязок.
Насколько мне известно, совет Грега неверен. Вы всегда должны использовать GetValue
/SetValue
из своего свойства оболочки CLR. SetCurrentValue
более полезен в сценариях, где вам нужно свойство для получения заданного значения, но не хотите перезаписывать любые привязки, триггеры или стили, которые были настроены против вашего свойства.