zoukankan      html  css  js  c++  java
  • 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.     绑定方式

    子主动绑父

    父主动绑子


    子直接去绑子

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

  • 相关阅读:
    python 的基础 学习 第六天 基础数据类型的操作方法 字典
    python 的基础 学习 第五天 基础数据类型的操作方法
    python 的基础 学习 第四天 基础数据类型
    ASP.NET MVC 入门8、ModelState与数据验证
    ASP.NET MVC 入门7、Hellper与数据的提交与绑定
    ASP.NET MVC 入门6、TempData
    ASP.NET MVC 入门5、View与ViewData
    ASP.NET MVC 入门4、Controller与Action
    ASP.NET MVC 入门3、Routing
    ASP.NET MVC 入门2、项目的目录结构与核心的DLL
  • 原文地址:https://www.cnblogs.com/akwwl/p/3056289.html
Copyright © 2011-2022 走看看