我有一个正在开发的wpf控件。
此控件包含并封装另一个控件。
我想将内部控件的属性暴露给使用该控件的窗口。 我还希望内部控件在此属性更改时执行逻辑。
有什么建议吗?
答案 0 :(得分:2)
内部和外部控件都应该定义依赖项属性。外部控件的模板应该包含内部控件,并且应该将属性绑定在一起:
<local:InnerControl SomePropertyOnInnerControl="{TemplateBinding SomePropertyOnOuterControl}"/>
这可以确保您的控件可以独立使用并且彼此分离。可以根据它们在该控件中的用途来命名属性。例如,内部控件可以将其称为Text
,而外部控件将其用于更具体的目的,如CustomerName
。
答案 1 :(得分:0)
依赖项属性更新通过属性元数据处理,属性元数据被定义为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();
}