对继承的依赖项属性的绑定
本文关键字:属性 绑定 依赖 继承 | 更新日期: 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。