我有一个我正在开发的 wpf 控件。
该控件包含并封装了另一个控件。
我想将内部控件的属性公开给使用该控件的窗口。我还希望内部控件在此属性更改时执行逻辑。
有什么建议么?
我有一个我正在开发的 wpf 控件。
该控件包含并封装了另一个控件。
我想将内部控件的属性公开给使用该控件的窗口。我还希望内部控件在此属性更改时执行逻辑。
有什么建议么?
内部和外部控件都应该定义依赖属性。外部控件的模板应该包括内部控件,并且应该将属性绑定在一起:
<local:InnerControl SomePropertyOnInnerControl="{TemplateBinding SomePropertyOnOuterControl}"/>
这可以确保您的两个控件都可以独立使用并且彼此分离。属性可以根据它们在该控件中的用途来命名。例如,内部控件可能将其称为类似的东西Text
,而外部控件将其用于更具体的目的,例如CustomerName
.
依赖属性更新是通过属性元数据处理的,它被定义为 DependencyProperty 的一部分。(它也可以添加到现有的 DP,但这是另一个主题。)
使用元数据定义您的 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();
}