Можете ли вы вручную обновить привязку, если у вас есть только ссылка на объект Binding, а не на то, с чем он связан? - PullRequest
0 голосов
/ 06 сентября 2018

В нашем коде у нас есть экземпляр объекта Binding, который нам нужно обновить вручную. Проблема в том, что мы не знаем, где это на самом деле применяется.

Обычно, если у вас есть целевой объект и свойство, для которого установлена ​​привязка, вы можете получить BindingExpression, а затем вызвать UpdateTarget(). Однако в нашем конкретном случае мы делаем это с помощью ProvideValue метода MarkupExtension, который в конечном итоге используется на Setter в Style, и привязка технически не ограничена до применения стиля, который будет долгим после вызова ProvideValue.

Теперь мы обошли это ограничение, изнутри ProvideValue, обернув это Binding в MultiBinding и установив вторую Binding для источника и свойства, которое мы контролируем. Затем, прикоснувшись к этому свойству, мы заставляем MultiBinding обновиться, что приведет к повторной оценке всех привязок. Но это просто взлом! Это работает, но это все еще взлом!

Так возможно ли это? Я предполагаю, что нет, так как мое понимание привязки просто устанавливает BindingExpression, который обрабатывает реальную работу, но я могу ошибаться.

Так можно ли это сделать?

...