Я вложенное свойство этого наследуемые:Связывание на унаследованном свойстве зависимостей
public static readonly DependencyProperty ResourcePackageProperty =
DependencyProperty.RegisterAttached("ResourcePackage", typeof(IResourcePackage), typeof(ResourceUIElement),
new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.Inherits));
На контроле контейнера, я установил это вложенное свойство управление => потомка наследует это и это хорошо до сих пор.
Теперь я пытаюсь определить привязку, как это:
var binding = new Binding();
binding.Source = proxy;
binding.Mode = BindingMode.OneWayToSource;
binding.Path = new PropertyPath("Value");
binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
BindingOperations.SetBinding(childControl, ResourceUIElement.ResourcePackageProperty, binding);
Это, как предполагается обновить значение -property из прокси -объект когда ResourcePackage-свойство изменений в childControl ,
Это работает, когда я напрямую установить вложенное свойство на дочерний элемент управления, но не работу, когда вложенное свойство изменяется на элементе управления контейнера (и, таким образом, наследуется в childControl).
Возможно ли это вообще с системой свойств зависимостей WPF?
Обратите внимание, что вы не устанавливаете привязки для полных классов, а для экземпляров. Поэтому, если вы хотите, чтобы ваше прокси-значение изменилось, если AP в вашем элементе управления контейнером изменилось, вам нужно установить другое связывание с вашим контейнером в качестве цели. –
Я понял это так: childControl-instance получает AP из containercontrol-instance => таким образом, я предположил, что изменение AP на containercontrol также изменяет его на дочерних элементах управления (поскольку они их выводят), а привязки будут запускаться. Если это не так, я ничего не могу сделать против этого - код, который создает привязку, не знает, какой у предка-управления есть набор AP. –
С помощью всего лишь «копирования» методов классов, реквизитов и т. Д., Но экземпляры, которые вы создаете из этих классов, не связаны. Поэтому изменение свойства в экземпляре базового класса не влияет на экземпляры производных классов. Но позвольте мне сказать вам: всегда есть способ, не сдавайтесь;) Вы могли бы, например, добавить свойство, называемое ContainerControl, вашему childControl, которое устанавливается, когда дочерний элемент управления добавляется в элемент управления контейнера. –