• DependencyProperty属性介绍


    1  DependencyProperty从属属性

    1.     从属属性要定义为静态.为了在外部可以绑定,最好定义为Public

    2.     从属属性实际上是取代了正常属性的存值变量

    3.     如果从属属性所对应的正常属性是实例成员,操作属性值时的表现形式为实例成员

    4.     只有继承System.Workflow.ComponentModel.DependencyObject的类才能应用定义DependencyProperty

    5.     要使用System.Workflow.ComponentModel.DependencyProperty的静态方法注册属性

    6.     注册从属属性的类中必须存在名为[注册名Property]的静态 DependencyProperty变量

    7.     定义从属属性不毕然要定义一个与之对应的属性,注册从属属性也可以在当前类外部进行

    1.1      Register向类注册从属属性

    System.Workflow.ComponentModel.DependencyProperty类的静态方法

    Creates new instances of the DependencyProperty possessing specific initialization conditions.

    重载1

    public static DependencyProperty Register(string name, Type propertyType, Type ownerType);

    参数1:注册的从属属性的名子,该值赋给Name属性

    参数2:属属性的数据类型,该值赋给PropertyType属性

    参数3:再将将从属性性注册到的类,该值赋给OwnerType属性

    重载2

    public static DependencyProperty Register(string name, Type propertyType, Type ownerType, PropertyMetadata defaultMetadata);

    参数1:注册的从属属性的名子,该值赋给Name属性

    参数2:属属性的数据类型,该值赋给PropertyType属性

    参数3:再将将从属性性注册到的类,该值赋给OwnerType属性

    参数4:从属性性的默认值,该值赋给DefaultMetadata属性

    public Activity1: SequenceActivity

    {

      //从属属性A

    public static DependencyProperty BProperty = DependencyProperty.Register("B", typeof(string), typeof(Activity1));

    public string B

    {

    get{ return ((string)(base.GetValue(Activity1.BProperty)));}

    set{ base.SetValue(Activity1.BProperty, value); }

    }

     

    //从属属性B

    public static DependencyProperty AProperty = DependencyProperty.Register("A", typeof(string), typeof(Activity1),new PropertyMetadata("love"));

    public string A

    {

    get{return ((string)(base.GetValue(Activity1.AProperty)));}

    set{base.SetValue(Activity1.AProperty, value);}

    }

    }

    说明:

    对应的属性名,与注册的从属属性名,可以不一样,但最好一样

    静态的从属属性与注册的从属属性名的格式必须是: [名Property] 与 [名] 的格式,如:

    BProperty = DependencyProperty.Register("B",

    AProperty = DependencyProperty.Register("A"

    1.2      得到从属属性的基本信息

    System.Workflow.ComponentModel.DependencyProperty类的实例属性

    类.从属属性.DefaultMetadata

    得到从属性性的默认值

    类.从属属性.Name

    得到从属属性的名子

    类.从属属性.OwnerType

    得到该从属属性所属的类

    类.从属属性.PropertyType

    得到从属属性的数据类型

     

     

     

     

     

     

    System.Console.WriteLine(Activity1.AProperty.DefaultMetadata.DefaultValue);

    System.Console.WriteLine(Activity1.AProperty.IsAttached);

    System.Console.WriteLine(Activity1.AProperty.IsEvent);

    System.Console.WriteLine(Activity1.AProperty.Name);

    System.Console.WriteLine(Activity1.AProperty.OwnerType);

    System.Console.WriteLine(Activity1.AProperty.PropertyType);

    System.Console.WriteLine(Activity1.AProperty.ValidatorType);

    1.3      FromName 从指定类中返回指定名称的从属属性

    System.Workflow.ComponentModel.DependencyProperty类的静态方法

    public static DependencyProperty FromName(string propertyName, Type ownerType);

    返回值:从属属性对象

    参数1:从属属性的名称,即Name的字符串

    参数2:要操作的包含从属属性的类

                DependencyProperty p = DependencyProperty.FromName("A", typeof(Activity1));

                System.Console.WriteLine(p.DefaultMetadata.DefaultValue);

                System.Console.WriteLine(p.IsAttached);

                System.Console.WriteLine(p.IsEvent);

                System.Console.WriteLine(p.Name);

                System.Console.WriteLine(p.OwnerType);

                System.Console.WriteLine(p.PropertyType);

                System.Console.WriteLine(p.ValidatorType);

    1.4      FromType 得到指定类的全部从属属性列表

    System.Workflow.ComponentModel.DependencyProperty类的静态方法

    public static IList<DependencyProperty> FromType(Type ownerType);

    返回值:从属属性集合

    参数1:要操作的包含从属属性的类

                System.Collections.Generic.IList<DependencyProperty> pls;

                pls = DependencyProperty.FromType(typeof(Activity1));

                foreach (DependencyProperty temp in pls)

                {

                    System.Console.WriteLine(temp.Name);

                }

    1.5      从属属性可以在外部注册

        public class w : System.Workflow.ComponentModel.DependencyObject

        {

           private static DependencyProperty pProperty;

        }

                DependencyProperty p = DependencyProperty.Register("p", typeof(string), typeof(w));

                w obj = new w();

                obj.SetValue(p, "123");

                object v = obj.GetValue(p);

                System.Console.WriteLine(v);

    2             使用从属属性

    2.1      GetValue、SetValue 通过从属属性读取、设置属性值

    System.Workflow.ComponentModel.DependencyObject的实例方法

    public void SetValue(DependencyProperty dependencyProperty, object value);

    实例.SetValue(类.从属属性,值)

    public object GetValue(DependencyProperty dependencyProperty);

    值 = 实例.SetValue(类.从属属性)

    private Activity1 activity11;

    activity11 = new Activity1();

    activity11.SetValue(Activity1.AProperty, "值");

    object v = activity11.GetValue(Activity1.AProperty);

    2.2      代码方式的从属属性的绑定

    1.     使用 System.Workflow.ComponentModel.ActivityBind类进行绑定

    Name:要绑定Activity对象实例的Name

    Path:要绑定的Activity对象属性

    2.     使用从属属性所在Activity对象的SetBinding方法进行绑定

    从属属性所在Activity对象.SetBinding(Activity对象类.从属属性,ActivityBind对象)

    3.     使用从属属性所在Activity对象的的RemoveProperty方法移除绑定

    从属属性所在Activity对象.RemoveProperty(Activity对象类.从属属性)

    代码

    System.Workflow.ComponentModel.ActivityBind activitybind1 = new System.Workflow.ComponentModel.ActivityBind();

    activitybind1.Name = "Workflow3"; //要绑定Activity对象实例的Name

    activitybind1.Path = "S"; //要绑定的Activity对象属性

    //进行绑定

    this.activity11.SetBinding(Activity1.AProperty,activitybind1);

               

    //移除绑定

    //this.activity11.RemoveProperty(Activity1.AProperty);

    注:使用绑定方式,而只是简单赋值,直接对属性赋值即可,也可用SetValue的方法对属性所对应的从属属性赋值

    2.3      使用设计器进行绑定

    2.4      配置文件的从属属性绑定

    <ns0:Activity1

    x:Name="activity11"

    A="{ActivityBind Workflow3,Path=S}"

    B="wxwinter"

    C="{x:Null}" />

    绑定使用

    从属属性 = "{ActivityBind 要绑定Activity对象实例的Name,Path=要绑定的Activity对象属性 }"

    不绑定,直接赋值

    从属属性=""

    从属属性="{x:Null}"

    也可以使用如下方式绑定

    <ns0:Activity1x:Name="activity11"B="wxwinter"C="{x:Null}" >

        <ns0:Activity1.A>

          <ActivityBindName="Workflow3"Path="S" />

        </ns0:Activity1.A>

    </ns0:Activity1

    2.5      绑定方式说明

    1.     不能在当前类中即定义DependencyProperty,又对DependencyProperty进行绑定,要解决这种情况,最好是在父类中定义DependencyProperty,在子类中进行绑定

    2.     绑定后,数据会同步

    3.     绑定方式

    子主动绑父

    父主动绑子


    子直接去绑子

    子与子之间通过一个中介实现绑定

  • 相关阅读:
    window下启动tomcat输出日志乱码
    Mybatis
    JAVA-Stream
    记录-linux安装supervisor来监控elasticsearch
    草稿
    定时任务
    阿里云linux6.9 64位安装mysql5.7.23记录
    归并排序
    快速排序
    HTML DOM
  • 原文地址:https://www.cnblogs.com/akwwl/p/3056289.html
Copyright © 2020-2023  润新知