如何实现一个依赖属性?






4.48/5 (22投票s)
依赖属性的设置是为了使声明式代码能够改变对象的属性,从而通过提供一种关于数据变化的更强大的通知系统,以非常具体的方式减少数据需求。
依赖属性的设置是为了使声明式代码能够改变对象的属性,从而通过提供一种关于数据变化的更强大的通知系统,以非常具体的方式减少数据需求。在 .NET 中,有两种类型的属性:普通属性和依赖属性,后者在普通属性的基础上增加了功能。
现在,让我们讨论如何实现这样一个依赖属性,以便在数据变化时提供强大的通知。
首先,从 INotifyPropertyChanged
接口实现 UserControl
类。
public partial class MyUserControl : UserControl, INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
创建你自己的普通属性。 假设属性的名称是“Caption
”。
public string Caption
{
get { return GetValue(CaptionProperty).ToString(); }
set { SetValue(CaptionProperty, value); }
}
现在,通过调用 Register
方法,并传递你在上一步中用于存储数据的属性字段,将 DependencyProperty
注册到 CLR。
public static readonly DependencyProperty CaptionProperty =
DependencyProperty.Register("Caption", typeof(string), typeof(MyUserControl),
new PropertyMetadata(string.Empty, OnCaptionPropertyChanged));
DependencyProperty
的标识符字段的名称将与你在属性中使用的名称相同,并在末尾附加“Property”。 在这个例子中,我们的属性名称是“Caption
”,因此我们的标识符字段名称是“CaptionProperty
”。 在 Register
方法中添加 PropertyMetaData
,包含默认值和回调事件处理程序,如上述代码所示。 将标识符标记为 static
和 readonly
,以便它对 CLR 来说是唯一的。
现在,实现 OnCaptionPropertyChanged
事件处理程序。
private static void OnCaptionPropertyChanged(DependencyObject dependencyObject,
DependencyPropertyChangedEventArgs e)
{
MyUserControl myUserControl = dependencyObject as MyUserControl;
myUserControl.OnPropertyChanged("Caption");
myUserControl.OnCaptionPropertyChanged(e);
}
private void OnCaptionPropertyChanged(DependencyPropertyChangedEventArgs e)
{
txbCaption.Text = Caption;
}
依赖属性的实现已经完成。 你可以从 XAML 调用它
<local:MyUserControl Caption="My First Dependency Property Example" />
或者从代码隐藏文件调用它。
MyUserControl myUserControl = new MyUserControl();
myUserControl.SetValue(MyUserControl.CaptionProperty,
"My First Dependency Property Example");