依赖属性

博客里面牛人太多了,有很多好的文章。

刚才看了一下一篇;介绍的很好,记录了一部分以后会用到的知识点;

 

引入依赖属性的目的:

1新功能的引入;

2节约内存;

3支持多个提供对象;

 

实现方法:

第一步: 让所在类型继承自 DependencyObject基类,在WPF中几乎所有的 WPF 控件都间接继承自DependencyObject类型。 
第二步:声明:使用 public static 声明一个 DependencyProperty的变量,该变量才是真正的依赖属性 ,这里其实用了简单的单例模式的原理进行了封装(构造函数私有),只暴露Register方法给外部调用。 
第三步:注册:在静态构造函数中完成依赖属性的元数据注册,并获取对象引用,把刚才声明的依赖属性放入到一个类似于容器的地方,没有讲实现原理之前,请容许我先这么陈述。 
第四步:实现:怎样才能对这个依赖属性进行读写呢?答案是提供一个依赖属性的实例化包装属性,通过这个属性来实现具体的读写操作。

public class SampleDPClass : DependencyObject
{
    //声明一个静态只读的DependencyProperty字段
    public static readonly DependencyProperty SampleProperty;

    static SampleDPClass()
    {
        //注册我们定义的依赖属性Sample
        SampleProperty = DependencyProperty.Register("Sample", typeof(string), typeof(SampleDPClass),
            new PropertyMetadata("Knights Warrior!", OnValueChanged));
    }

    private static void OnValueChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
    {
        //当值改变时,我们可以在此做一些逻辑处理
    }

    //属性包装器,通过它来读取和设置我们刚才注册的依赖属性
    public string Sample
    {
        get { return (string)GetValue(SampleProperty); }
        set { SetValue(SampleProperty, value); }
    }
}

  

总结:我们一般.NET属性是直接对类的一个私有属性进行封装,所以读取值的时候,也就是直接读取这个字段;而依赖属性则是通过调用继承自DependencyObject的GetValue()和SetValue来进行操作,它实际存储在DependencyProperty的一个IDictionary的键-值配对字典中,所以一条记录中的键(Key)就是该属性的HashCode值,而值(Value)则是我们注册的DependencyProperty。

 

 

 

附加属性

附加属性是一种特殊的依赖属性。他允许给一个对象添加一个值,而该对象可能对此值一无所知。

 

详细http://www.cnblogs.com/knightswarrior/archive/2010/08/27/1809739.html

 

posted @ 2012-05-20 17:40  Crazylight  阅读(520)  评论(0编辑  收藏  举报