Вы можете получить существующий Binding
, используя FrameworkElement.GetBindingExpression . Вот образец:
FrameworkElement yourControl = null; // the code to get the control goes here
BindingExpression bindingExpression =
yourControl.GetBindingExpression(TextBox.Background);
Binding binding = bindingExpression.ParentBinding; // it's your binding
Затем создайте новый объект Binding
, настройте его свойства (при необходимости измените цель) и используйте SetBinding
, чтобы присоединить его.
UPDATE
Теперь об источнике привязки.
Обратите внимание, что свойство Source
будет ненулевым, только если вы установите это свойство явно.
Другие опции для источника Binding
включают в себя:
- определенный элемент: используется, если установлено
Binding.ElementName
свойство
- шаблонное управление: используется, если
Binding.RelativeSource
установлено на RelativeSource
с Mode=RelativeSourceMode.TemplatedParent
- контроль цели привязки: используется, если для
Binding.RelativeSource
установлено значение RelativeSource
с Mode=RelativeSourceMode.TemplatedParent
DataContext
: если ни Source
, ни предыдущие 3 опции не применимы.
Если вы хотите клонировать Binding
, вам следует проверить все эти опции.
Однако, если вам просто нужен элемент данных, вам лучше использовать свойство BindingExpression.DataItem
, которое должно возвращать фактический элемент данных, являющийся источником привязки.