依赖属性(Dependency Property)

相比较于普通属性,依赖属性有以下特点:

  • 变化通知(change notification)
  • 节省内存
  • 使用某种带优先级决定策略(resolution strategy)来读取属性的值。
    属性值可以依赖于其他对象,适用于数据绑定,属性值继承等场景。

依赖属性的声明

  • 宿主必须是 DependencyObject 的子类。
  • 使用 DependencyProperty 类型声明依赖属性。(public static readonly)
  • 使用 DependencyProperty.Register 方法注册依赖属性。
  • 使用属性包装器包装依赖属性(调用 GetValue, SetValue)。

附加属性(Attached Property)

附加属性是所处环境(上级元素)所附加的属性,是一种特殊的依赖属性。

  • 宿主必须是 DependencyObject 的子类。
  • 使用 DependencyProperty 类型声明依赖属性。(public static readonly)
  • 使用 DependencyProperty.RegisterAttached 方法注册附加属性。
  • 使用静态方法 GetXXX, SetXXX 存取附加属性(调用 GetValue, SetValue)。

路由事件(Routed Events)

路由事件被用来实现事件的路由功能。

路由事件的声明

  • 宿主必须是 FrameworkElement 的子类。
  • 使用 RoutedEvent 类型声明路由事件。(public static readonly)
  • 使用 EventManager.RegisterRoutedEvent 方法注册路由事件。
  • 使用标准 .NET 事件声明机制包装路由事件(add, remove)。

路由策略

  • 直接:事件由事件源直接触发。
  • 冒泡:由事件源逐级向上传递直至根元素。
  • 隧道:由根元素逐级向下传递直至事件源。
    隧道事件名通常以 Preview 打头。

附加事件(Attached Event)

由下级元素的冒泡事件附加的事件。

数据绑定(Data Binding)

通过在目标对象的目标属性中设定绑定源及其值路径(属性名 Path=)来实现数据绑定。

绑定其他界面元素

  • 指定界面元素名作为绑定源。(ElementName=)
  • 绑定模式(方向 Mode=)
    • OneWay:单向,源属性到目标属性
    • TwoWay:双向,源属性到目标属性,目标属性到源属性
    • OneTime:单向,源属性到目标属性,仅限一次
    • OneWayToSource:单向,目标属性到源属性
    • Default:由目标对象元数据决定
  • 方向为目标属性到源属性时触发源属性更新的因素(UpdateSourceTrigger=)
    • PropertyChanged:目标属性变更时
    • LostFocus:目标属性变更后且失去焦点时
    • Explicit:明确调用 UpdateSource 方法时
    • Default:由源属性元数据决定

绑定数据源

指定资源或对象作为绑定源。(Source=)

绑定相对数据源

寻找某个与自身存在某种相对位置关系的元素,把它作为绑定源。(RelativeSource=)

  • 绑定模式(目标 Mode=)

    • Self:自身
    • FindAncestor:上级元素
    • PreviousData
    • TemplatedParent
  • 绑定模式为上级元素时需要满足的条件
    • 指定上级元素的种类(AncestorType=)
    • 找到第n个指定种类的上级元素(AncestorLevel=)

绑定数据上下文

没有指定数据源时,逐级向上寻找上级元素的 DataContext 属性,该属性非空时把它作为绑定源。

命令(Command)

  • ICommand 接口
  • RoutedCommand 类
  • RoutedUICommand 类

最新文章

  1. SQL SERVER 统计信息概述(Statistics)
  2. Android开源框架ImageLoader的完美例子
  3. MLlib 编程指导-spark-1.2.0
  4. 用python实现文件读取和内容替换
  5. Swift - 多线程实现方式(3) - Grand Central Dispatch(GCD)
  6. 可存放任意类型变量的动态数组--C语言实现
  7. 5.移植uboot-设置默认环境变量,裁剪,并分区
  8. Dubbo中集群Cluster,负载均衡,容错,路由解析
  9. Docker 创建 Crucible4.6.1 以及与 Crowd3.3.2 实现 SSO 单点登录
  10. [LeetCode] Loud and Rich 聒噪与富有
  11. 在.net core web项目中生成二维码
  12. AOP 实现自定义注解
  13. zabbix 客户端添加自定义参数
  14. docker 网络的几种模式
  15. java并发中的锁
  16. socketpair初识
  17. 剑指offer三十九之平衡二叉树
  18. .NET Core 控制台中文乱码问题!
  19. 2017中国大学生程序设计竞赛 - 网络选拔赛 HDU 6154 CaoHaha's staff 思维
  20. 用Web API Client 调用 Web API

热门文章

  1. sql语句实例练习
  2. tomcat 常用命令 网上找的资料
  3. 【转】SSH穿越跳板机:一条命令跨越跳板机直接登陆远程计算机
  4. MariaDB的安装与启动
  5. 机器学习实战ch04 关于python版本所支持的文本格式问题
  6. Charles更新至4.2.8特别版
  7. LAB1 partIV
  8. 【剑指Offer】只出现一次的字符
  9. ubuntu 装机步骤表
  10. 微信小程序企业给零钱打款 提示未配置api发起,请查看产品中心企业付款配置