【发布时间】:2013-09-13 08:49:02
【问题描述】:
我有一个可继承的附加属性:
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 属性发生变化时更新 proxy 对象的 Value 属性。 p>
这在我直接在子控件上设置附加属性时有效,但在容器控件上更改附加属性时它不起作用(因此,被继承到 childControl).
使用 WPF 的依赖属性系统是否可以做到这一点?
【问题讨论】:
-
请注意,您不是在完整的类上设置绑定,而是在实例上设置绑定。因此,如果您希望您的代理值在您的容器控件中的 AP 发生更改时更改,您需要设置另一个绑定,将您的容器控件作为目标。
-
我这样理解:childControl-instance 从 containercontrol-instance 派生 AP => 因此,我认为更改 containercontrol 上的 AP 也会更改子控件上的 AP(因为它们派生它)并且绑定将被触发。如果不是这种情况,我将无能为力 - 创建绑定的代码不知道哪个祖先控件设置了 AP。
-
通过派生您只是“复制”类方法、道具等,但您从这些类构建的实例没有连接。因此,更改基类实例的属性对派生类的实例没有影响。但是让我告诉你:总有一种方法,不要放弃;)你可以,例如,向你的 childControl 添加一个名为 ContainerControl 的属性,当子控件添加到容器控件时会设置该属性。
-
我不明白这个问题。请您发布更多代码。
标签: c# wpf data-binding dependency-properties