2012-05-02 3 views
1

Я пытаюсь перенести приложение Silverlight в Metro и обнаружил, что в моей настройке ControlTemplate моя привязка к {Binding PropertyName, RelativeSource={RelativeSource TemplatedParent}} не работает, однако {TemplateBinding PropertyName} делает.Связывание с RelativeSource TemplatedParent не работает в ControlTemplate

Обе эти работы в моем приложении Silverlight, однако мне нужно использовать синтаксис RelativeSource, чтобы разрешить использование Mode=TwoWay.

Что мне нужно сделать, чтобы использовать привязки TwoWay внутри ControlTemplate?

ответ

2

Если вы создаете свой собственный элемент управления - вы можете определить детали шаблона и получить их, вызвав GetTemplateChild() в переопределении OnApplyTemplate(), а затем просто обновите свойства вручную вместо того, чтобы полагаться на привязки. Если вы просто обновляете существующие элементы управления, возможно, вы можете сначала подклассифицировать их или создать прикрепленное свойство зависимостей/behaviors, которые позаботятся о привязке.

+0

Я пытаюсь разделить кодовую базу логики управления между SL5, WP7 и Metro, поэтому пыталась сохранить что-либо UI, связанное с ControlTemplate. Тем не менее, я попробовал, как вы предложили, и настроил привязку в моей OnApplyTemplate, однако привязка к TwoWay к ListBox.SelectedItemProperty не работает и не запускает мой PropertyChangedCallback. Возможно, это больше проблема с элементом управления ListBox, чем с чем-либо еще. –

+0

Скраб, я попытался реплицировать это в новом приложении, содержащем только пользовательский ContentControl, и он сработал. Вернуться к доске для рисования! –

+0

Добавление обработчика события SelectionChanged в ListBox и ручное обновление действительно работает. Мне просто нужно взять это в лагерь Win8 dev, на который я отправился на следующую неделю, и посмотреть, что они говорят! –

Смежные вопросы