zoukankan      html  css  js  c++  java
  • 依赖属性

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

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

    引入依赖属性的目的:

    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

     

  • 相关阅读:
    阻塞赋值和非阻塞赋值
    组合逻辑和时序逻辑
    信道估计常用算法
    Verilog有限状态机FSM
    希尔伯特变换
    微信小程序取消分享的两种方式
    orm 常用字段
    drf获取请求过来时的request
    WeChat--API
    Django之admin源码浅析
  • 原文地址:https://www.cnblogs.com/crazylight/p/2510674.html
Copyright © 2011-2022 走看看