对继承的依赖项属性的绑定

本文关键字:属性 绑定 依赖 继承 | 更新日期: 2023-09-27 18:31:07

我有一个可继承的附加属性:

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);

这应该在子控件的 ResourcePackage-属性更改时更新代理对象的 Value-属性。

当我直接在子控件上设置附加属性时,这有效,但是当容器控件上的附加属性发生更改(因此继承到 childControl)时,它不起作用

使用 WPF 的依赖属性系统是否可以做到这一点?

对继承的依赖项属性的绑定

现在我找到了解决方案:

var binding = new Binding();
binding.Source = childControl;
binding.Mode = BindingMode.OneWay;
binding.Path = new PropertyPath("(0)", ResourceUIElement.ResourcePackageProperty);
binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
BindingOperations.SetBinding(proxy, Proxy.ValueProperty, binding);

将绑定转换为相反的方向有效。以前是 OneWayToSource,现在代理类派生自 DependencyObject,绑定是 OneWay。