В чем разница между свойством зависимости SetValue () и SetCurrentValue () - PullRequest
49 голосов
/ 20 ноября 2010

Причина, по которой я спрашиваю это, заключается в том, что @Greg D (из этот вопрос ) рекомендовал мне использовать SetCurrentValue() вместо этого, но посмотрите на документы и не увидели, что разница. Или что означает «без изменения источника значений»?

SetValue()

Устанавливает локальное значение свойства зависимостей, определяемое его идентификатором свойства зависимостей.

SetCurrentValue()

Устанавливает значение свойства зависимости без изменения источника значения.

Ответы [ 2 ]

55 голосов
/ 20 ноября 2010

Ссылка MSDN, которую вы предоставили, говорит об этом довольно хорошо:

Этот метод используется компонентом, который программно устанавливает значение одного из своих собственных свойств, не отключая заявленное использование этого свойства приложением.Метод SetCurrentValue изменяет действующее значение свойства, но существующие триггеры, привязки данных и стили будут продолжать работать.

Предположим, вы пишете элемент управления TextBox, и вы выставилиText свойство, которое люди часто используют следующим образом:

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

В коде вашего элемента управления, если вы позвоните SetValue, вы перезапишете привязку с тем, что вы предоставите.Однако, если вы позвоните по номеру SetCurrentValue, это свойство примет указанное значение, но не разрушит никаких привязок.

Насколько мне известно, совет Грега неверен.Вы всегда должны использовать GetValue / SetValue из своего свойства оболочки CLR.SetCurrentValue более полезен в сценариях, когда вам нужно, чтобы свойство принимало заданное значение, но не хотите перезаписывать какие-либо привязки, триггеры или стили, настроенные для вашего свойства.

2 голосов
/ 18 марта 2014

В дополнение к принятому ответу:

Я обнаружил, что этот пост довольно хорошо объясняет SetCurrentValue ().Обратите внимание, как система приоритета значения свойства зависимостей будет принимать локальное значение над связанным значением.Что объясняет комментаторам неожиданное поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...