加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

模拟实现WPF的依赖属性及绑定通知机制(2)--依赖对象的准备

发布时间:2020-12-14 05:42:33 所属栏目:百科 来源:网络整理
导读:依赖对象一个主要的功能就是提供对依赖属性属性值的管理,所有需要具有依赖属性的类都可以从这里继承,而无需自己去管理依赖属性值。依赖对象的主要方法就是SetValue和GetValue两个方法,这也是依赖属性和普通属性获取值不一样的地方,当然实际的应用中依赖

依赖对象一个主要的功能就是提供对依赖属性属性值的管理,所有需要具有依赖属性的类都可以从这里继承,而无需自己去管理依赖属性值。依赖对象的主要方法就是SetValue和GetValue两个方法,这也是依赖属性和普通属性获取值不一样的地方,当然实际的应用中依赖属性一般不会直接使用这两个方法,而是封装成普通属性方式。另外对于依赖属性,我们还提供了一个属性值发生变化时依赖对象可以截获的回调机制,这样做的目的是增加对依赖属性的控制,但需要注意的是这个控制是针对类的,而不是实例,因此处理的时候需要注意到这个特性。

1)为了提供这个特性我们需要定义一个用于回调的委托:

public delegate void MyPropertyChangedCallback(MyDependencyObject d,MyDependencyPropertyChangedEventArgs e);

2)定义一个所谓的元数据类,其实就是为了记载确实值,回调参数的类

/// <summary>
??? /// 属性元数据类,目标是为了存储属性的缺省值和值发生变化时的回调函数
??? /// 其实在注册依赖属性的时候,可以直接将该类的成员加上,但这样的做法不利于扩展,
??? /// 因为你可以继承这个MyPropertyMetadata这个类,增加信息量,而不需要更改依赖
??? /// 属性的结构。
??? /// </summary>
??? public class MyPropertyMetadata
??? {
??????? public MyPropertyChangedCallback PropertyChangedCallback { get; private set; }
??????? public object DefaultValue { get; private set; }
??????? public MyPropertyMetadata(object DefaultValue = null,MyPropertyChangedCallback Callback=null)
??????? {
??????????? this.PropertyChangedCallback = Callback;
??????????? this.DefaultValue = DefaultValue;
??????? }
??? }

3)参数定义如下:(这里我只是在微软相关类的基础上做了小修改)

?/// <summary>
??? /// 属性发生改变时的参数
??? /// </summary>
??? public class MyDependencyPropertyChangedEventArgs
??? {
??????
??????????? // 摘要:
??????????? //???? 获取发生更改之后的属性的值。
??????????? //
??????????? // 返回结果:
??????????? //???? 发生更改之后的属性值。
??????? public object NewValue { get; private set; }
??????????? //
??????????? // 摘要:
??????????? //???? 获取发生更改之前的属性的值。
??????????? //
??????????? // 返回结果:
??????????? //???? 发生更改之前的属性值。
??????? public object OldValue { get; private set; }
??????????? //
??????????? // 摘要:
??????????? //???? 获取发生值更改的依赖项属性的标识符。
??????????? //
??????????? // 返回结果:
??????????? //???? 发生值更改的依赖项属性的标识符字段。
??????? public MyDependencyProperty Property { get; private set; }
??????? public MyDependencyPropertyChangedEventArgs(object NewValue,object OldValue,MyDependencyProperty Property)
??????? {
??????????? this.NewValue = NewValue;
??????????? this.OldValue = OldValue;
??????????? this.Property = Property;
??????? }

??? }

4)除了上述的功能,我们还要提供WPF的绑定机制的模拟,因此我们在依赖对象类中还提供了对绑定的管理和处理,下面是绑定的定义,比微软的要简化很多:

/// <summary>
??? /// 绑定设置类。
??? /// </summary>
??? public class MyBinding
??? {
??????? public object TargetObject { get; set; }
??????? public string PropertyName { get; set; }
??? }

这个类主要提供对绑定目标对象和属性的记载,我这里是模拟,我没有采用Path路径方式,但原理跟属性差不多,只不过要进行简单的语法分割,形成一个属性路径而已。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读