导图社区 WPF数据绑定技术
介绍Windows桌面应用开发的WPF核心的数据绑定Binding技术。
梳理本人在购买二手房过程中踩过的坑,希望给大家一个购买二手房的大致思路,以及避免一些可能的烦恼。
社区模板帮助中心,点此进入>>
互联网9大思维
安全教育的重要性
组织架构-单商户商城webAPP 思维导图。
个人日常活动安排思维导图
域控上线
西游记主要人物性格分析
17种头脑风暴法
python思维导图
css
CSS
WPF数据绑定技术
Binding
Binding模型图

源与路径
源
通俗地说,源是一个对象,通过属性公开自己的数据
实现INotifyPropertyChanged接口并在属性的set语句中激发PropertyChanged事件
情况一:控件作为Binding源
ElementName
Text="{Binding Path=Value, ElementName=slider1}"
情况二:实现INotifyPropertyChanged接口的普通CLR单个对象
情况三:普通CLR集合类型
ItemsSource
ItemTemplate
DataTemplate
常用ObservableCollection<T>代替List<T>作为列表类控件的ItemsSource
ObservableCollection<T>实现了INotifyPropertyChanged接口
情况四:ADO.NET数据
包括DataTable和DataView
情况五:使用XmlDataProvider把xml数据指定为Source
情况六:把依赖属性作为Binding的源
Binding链:依赖对象的依赖属性可作为Binding的Path
情况七:把容器的DataContext作为source
只指定Path,让Binding自己沿着控件树去找
所有的WPF控件都具有DataContext这个属性
DataContext是一个“依赖属性”
Binding沿着UI树自动查找的本质
情况八:通过Binding的RelativeSource属性相对地指定Source
适用于:当控件需要关注自己的、自己本身的容器或自己内部元素的某个值时
例:Text="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Grid},AncestorLevel=1},Path=Name}"
AncestorType属性告诉Binding寻找哪个类型的对象作为自己的源,不是这个类型的对象会被跳过
Mode
PreviousData
TemplatedParent
self
FindAncestor
情况九:把ObjectDataProvider对象指定为Source
适用于当数据源使用方法而不是属性将数据暴露给外界
情况十:把使用LINQ检索得到的数据对象作为Binding的源
binding的方向及数据更新
数据方向
BindingMode枚举
TwoWay
OneWay
OneTime
OneWayToSource
Default
根据目标是否可编辑等实际情况决定,可以是TwoWay,也可以是单向的
UpdateSourceTrigger
PropertyChanged
LostFocus
Explicit
找出哪些数据或事件更新了
NotifyOnSourceUpdated
值为true,触发SourceUpdated事件
NotifyOnTargetUpdated
值为true,触发TargetUpdated事件
路径
最简单:把源的属性当Path
多级路径
一路“点”下去
如:Text.length
集合索引器
xaml中: Path=Text.[3]
.可以省略
cs代码中:new Binding("/Text/[2]")
没有Path的Binding
binding源本身就是数据且不需要Path来指明
string 、int等基本类型
Path指定为“.”或者干脆没有Path的Binding
数据转换与校验
数据校验ValidationRules
具体实现:创建ValidationRule抽象类的派生类并实现Validate方法
数据转换Converter
具体实现: 实现IValueConverter接口及Convert、ConvertBack方法
数据从Binding的Source流向Target
调用Convert方法
反之,调用ConvertBack方法
多路绑定
MultiBinding的Converter实现的是IMultiValueConverter接口