В нашем коде у нас есть экземпляр объекта Binding
, который нам нужно обновить вручную. Проблема в том, что мы не знаем, где это на самом деле применяется.
Обычно, если у вас есть целевой объект и свойство, для которого установлена привязка, вы можете получить BindingExpression
, а затем вызвать UpdateTarget()
. Однако в нашем конкретном случае мы делаем это с помощью ProvideValue
метода MarkupExtension
, который в конечном итоге используется на Setter
в Style
, и привязка технически не ограничена до применения стиля, который будет долгим после вызова ProvideValue.
Теперь мы обошли это ограничение, изнутри ProvideValue
, обернув это Binding
в MultiBinding
и установив вторую Binding
для источника и свойства, которое мы контролируем. Затем, прикоснувшись к этому свойству, мы заставляем MultiBinding обновиться, что приведет к повторной оценке всех привязок. Но это просто взлом! Это работает, но это все еще взлом!
Так возможно ли это? Я предполагаю, что нет, так как мое понимание привязки просто устанавливает BindingExpression
, который обрабатывает реальную работу, но я могу ошибаться.
Так можно ли это сделать?