WPF基础之依赖属性

依赖属性与附加属性

  • CLR属性

    类的方法在内存中只有一个拷贝,无论是否为静态方法,所以CLR属性保证了安全性,又不会增加内存的负担。

  • 依赖属性

    依赖属性自己没有值,通过Binding从数据源获取值

  • 依赖对象

    拥有依赖属性的对象

下面手动实现一个依赖对象,并包含一个依赖属性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Student:DependencyObject
{
//依赖属性
public static readonly DependencyProperty NameProperty = DependencyProperty.Register("Name",typeof(string),typeof(Student));
//CLR属性包装器
public string Name{
get{
return (string)GetValue(NameProperty);
}
set{
SetValue(NameProperty,value)
}
}
//SetBinding包装
public BindingExpressionBase SetBinding(DependencyProperty dp,BindingBase binding){
return BindingOperations.SetBinding(this,dp,binding);
}
}

依赖属性的优势

  • 依赖属性加入了属性变化通知、限制、验证等功能。这样可以使我们更方便地实现应用,同时大大减少了代码量。许多之前需要写很多代码才能实现的功能,在WPF中可以轻松实现。
  • 节约内存:在WinForm中,每个UI控件的属性都赋予了初始值,这样每个相同的控件在内存中都会保存一份初始值。而WPF依赖属性很好地解决了这个问题,它内部实现使用哈希表存储机制,对多个相同控件的相同属性的值都只保存一份。