0

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

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

这应该在childControl的 ResourcePackage 属性更改时更新代理对象的Value属性。

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

使用 WPF 的依赖属性系统是否有可能?

4

1 回答 1

0

现在我找到了解决方案:

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,现在 Proxy 类是从 DependencyObject 派生的,绑定是 OneWay。

于 2013-09-15T10:24:30.067 回答