Вы можете написать собственное присоединенное свойство для этого, которое изменяет привязку, и прикрепить его к UIElelement, где вы хотите изменить привязку. Все, что вам нужно сделать сейчас, это инициировать изменение этого присоединенного свойства всякий раз, когда должна измениться привязка. В измененном свойстве eventhander вашего присоединенного свойства зависимости у вас есть доступ к UIElement.
<TextBlock local:Helper.DynamicBinding="{Binding SomeStatePropertyOfTheCurrentDataContext}" />
И в измененном методе обработчика событий:
private void OnDynamicBindingChanged(DependencyObject sender, PropertyChangedEventArgs args)
{
var senderButton = sender as TextBlock;
if((args.NewValue as string) == "MainText")
{
// bind to the property "MainText" of the current datacontext now
}
else if((args.NewValue as string) == "OtherText")
{
// bind to the property "OtherText" of the current datacontext now
}
}
Однако, если вы столкнетесь с необходимостью изменения привязки во время выполнения, как это, есть вероятность, что ваш общий дизайн может быть улучшен!