2009-09-03 58 views
0

我有一个wpf控件,我正在开发。依赖项属性正确的用法

该控件包含并封装了另一个控件。

我想暴露内部控件的属性到消费控件的窗口。 我还希望内部控件在此属性更改时执行逻辑。

有什么建议?

+0

没有任何错误,它只是没有按”工作......我必须在两个属性上定义元数据。 –

回答

2

内部和外部控件都应定义依赖项属性。用于外部控制的模板应包括内部控制,并应的属性绑定在一起:

<local:InnerControl SomePropertyOnInnerControl="{TemplateBinding SomePropertyOnOuterControl}"/> 

这确保两者的控制是独立地可用和从海誓山盟解耦。这些属性可以根据它们在该控件中的用途命名。例如,内部控件可能会将它称为Text,而外部控件将其用于更具体的目的,如CustomerName

+0

这是正确的方法;代理属性不是DependencyProperty,并且不会给你正确的绑定行为。 – AndyM

0

通过属性元数据处理依赖属性更新,属性元数据定义为您的DependencyProperty的一部分。 (它也可以被添加到现有的DPS,但这是另一个话题。)

与元数据定义你的DependencyProperty:

public static readonly DependencyProperty MyValueProperty = 
    DependencyProperty.Register("MyValue", typeof(object), typeof(MyControl), 
    new UIPropertyMetadata(null, new PropertyChangedCallback(MyValue_PropertyChanged))); 

然后实现你的回调:

private static void MyValue_PropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
{ 
    MyControl c = (MyControl)d; 
    c.DoSomething(); 
}