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.     绑定方式

子主动绑父

父主动绑子


子直接去绑子

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

DependencyProperty属性介绍的更多相关文章

  1. DIV+CSS布局中主要CSS属性介绍

    Float: Float属性是DIV+CSS布局中最基本也是最常用的属性,用于实现多列功能,我们知道<div>标签默认一行只能显示一个,而使用Float属性可以实现一行显示多个div的功能 ...

  2. WPF中监视DependencyProperty的变化

    WPF中监视DependencyProperty的变化   周银辉 尽管一个类会提供很多事件,但有时候还是显得不够,比如说前两天我就以为WPF的ListBox控件会有ItemsSourceChange ...

  3. [Silverlight]监听指定控件(FrameworkElement)的依赖属性(DependencyProperty)的更改

    前言 转载请注明出处:http://www.cnblogs.com/ainijiutian 最近在silverlight项目使用Telerik的控件,遇到一个问题.就是使用RadBusyIndicat ...

  4. WPF依赖属性DependencyProperty

    写在之前: 依赖属性算是WPF醉醉基础的一个组成了.平时写代码的时候,简单的绑定很轻松,但是遇到复杂的层次比较多的绑定,真的是要命.所以,我觉得深刻认识依赖属性是很有必要的.本篇只是个人学习的记录,学 ...

  5. location.hash属性介绍

    location.hash属性介绍 例如URL: http://wwww.a.com/index#rhythmk 通过location.hash 我们将获取到 #rhythmk. 默认浏览器会滚动至i ...

  6. Autocomplete:属性介绍、firefox中文支持问题

    如有问题,请前往 http://www.cnblogs.com/dreamowneryong/p/4953911.html 原文评论交流 一,属性介绍 * minChars (Number) 在触发a ...

  7. DependencyProperty深入浅出

    写这篇心得之前,看到博友一句话:需求是推动发展的原动力. 说得好,说的棒,说到了点子上,说到了心里去: 好我们开始 最初的世界是简单的,甚至比单细胞动物还简单: 普通属性定义 public class ...

  8. .NET: WPF DependencyProperty

    DependencyProperty and DependencyObject is the core of WPF data binding. We can use this two class t ...

  9. WPF中的DependencyProperty存储方式详解

    前言 接触WPF有一段时间了,之前虽然也经常使用,但是对于DependencyProperty一直处于一知半解的状态.今天花了整整一下午将这个概念梳理了一下,自觉对这个概念有了较为清晰的认识,之前很多 ...

随机推荐

  1. winform c#中子窗体关闭刷新父窗体

    父窗体Form1 子窗体Form2 Form1中有一个datagridview控件和一添加按钮,Form2中有一个Text控件和一个保存按钮 要求点击Form1窗体上的添加按钮,弹出Form2,再te ...

  2. AsyncTask异步类的简单操作

    package com.example.day9; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; im ...

  3. jQuery form的load函数与el表达式赋值的冲突问题

    问题: 在使用el表达式给表单中的项赋初始值的时候,总是失败,物流公司没有自动选中,物流单号也没有显示值. <form id="form" method="post ...

  4. phpcms列表页调用 点击量

    很多朋友经常问Phpcms v9的首页.列表页.内容页点击量如何调用.现在就给大家分享phpcms V9如何分别在首页.列表页.内容页调用点击量代码: 1. Phpcms v9首页调用点击量{pc:c ...

  5. 分表需要解决的问题 & 基于MyBatis 的轻量分表落地方案

    分表:垂直拆分.水平拆分 垂直拆分:根据业务将一个表拆分为多个表. 如:将经常和不常访问的字段拆分至不同的表中.由于与业务关系密切,目前的分库分表产品均使用水平拆分方式. 水平拆分:根据分片算法将一个 ...

  6. Java实现高效的枚举元素集合

    Set是Java集合类的重要组成部分,它用来存储不能重复的对象.枚举类型也要求其枚举元素各不相同.看起来枚举类型和集合是很相似的.然而枚举类型中的元素不能随意的增加.删除,作为集合而言,枚举类型非常不 ...

  7. mysql操作类

    同事今天推荐了一个mysql链接操作的类,地址 https://github.com/joshcam/PHP-MySQLi-Database-Class  大概看了一下,还是不错的,有点意思,先记录一 ...

  8. Import VMware ESXi from VirtualBox

    VirtualBox can export appliance VMs to OVF format. And you can import the ovf format to VMware ESXi, ...

  9. iOS开发--改变tableHeaderView的高度

    1.先获取tableHeaderView 2.设置它的frame 3.将该view设置回tableview UIView *view=tableView. tableHeaderView; view. ...

  10. Oracle查询锁表和解锁

    1.查询是否锁表 SELECT l.session_id sid, s.serial#, l.locked_mode,l.oracle_username, l.os_user_name,s.machi ...