C# Binding

1.谁是源,  谁是目标

数据从哪里来,谁就是源   ...数据要给谁,谁就是目标-----<<WPF深入浅出>>

2. 谁绑定(到)谁   

谁需要数据, 谁写绑定表达式  .
" Binding对象"-------  在<<WPF编程宝典>>中指的是 写 绑定表达式 的这方

案例1:


<StackPanel>

<Slider Name="sorce" Margin="3" Minimum="1" Maximum="40" Value="10" TickFrequency="1"         TickPlacement="TopLeft"/>

 <TextBlock Margin="10" Text="Hahaha" Name="target" FontSize="{Binding ElementName=sorce,Path=Value}"/>

 </StackPanel>

1.在上面代码的基础上,增加3个button,各自添加 单击事件
2. 设置单击事件  修改 滑块 (Slider)的值()

结果:可以看到 目标 发生了变化

1. 修改 button 按钮 事件 , 现在我们直接修改 目标 的值

结果:

1.没单击的时候,滑块功能 正常

2.单击 1次,确实可以修改TextBlock 的字体大小

3. 再次不管单击 哪个button ,都无法修改 TextBlock 的值  

4. 滑块Slider功能失效了

 

双向绑定的诞生

1.绑定的模式 

注意 : 下面绑定模式的案例 中  TextBox  绑定 Slider

先体验以下 ,Mode=OneWay 模式------->源发生变化 ,更新目标属性

对比TwoWay模式:  源 或者目标都会随着改变

对比OneTime模式:(滑块的Value="10" 这是初始值,我为什么要强调呢?)

对比 OneWayToSource模式:(显示绑定失败, 还是还是可以使用 ,和OneWay 模式相反)

<<wpf编程宝典>> <<WPF深入浅出>> 都有论述这部分内容, 这里形象的展示出来

多绑定

这里并不是链接数据绑定,下面才是 (TextBox.Text绑定到Slider.value   TextBlock.FontSize 也绑定到Slider.value )

解释一下绑定过程:   TextBox.Text---> TextBlock.FontSize -->滑块.Value

通过全部设置为 双向绑定模式, 最终实现曲线救国

上面所有的双向绑定示例中:TextBox 有两个缺陷:

1. 可以输入非数字的值 (使用数据绑定验证 解决)

2. 修改后只能使用 TAB 键,让它失去焦点,才能生效 

 示例(TextBox  双向绑定 Slider )
修改 目标 后需要使用Tab键 ,才会更新

攻守执行异也  ,现在使用 Slider绑定TextBox  
修改 目标  源  会立即更新 
我这里已经没有使用Mode =TwoWay   ,使用默认的绑定 ,可以发现具有双向绑定的意思(拖动滑块可以改变 TextBox的值)..没有截图下来,自己实验....一定要知道,到底谁绑定了谁,


绑定更新

主要发生在反向的变化传递 Mode=TwoWay  Mode=OneWayToSource)

修改 目标 后需要使用Tab键 ,才会更新

 示例(TextBox  双向绑定 Slider )

 示例(TextBox 反向绑定 Slider )

1.设置Binding.UpdateSourceTrigger属性为 PropertyChanged

 2.设置Binding.UpdateSourceTrigger属性为Explicit

注意:这里还是  TextBox.Text 绑定 Slider .Value  ,使用默认的绑定模式

xmal代码没有贴出,只是增加了一个按钮和单击事件 .主要按钮事件的后台代码中
<<WPF编程宝典>>  中
BindingExpression 对象从
目标 获取.
Binding对象 说的是
目标




最后总结一下:

1.源和目标  :
目标作为一个依赖属性 , 依赖在源对象的某个属性上

2.更新


当更新方向是从目标时,更新始终会立即发生。

当更新的方向是从目标时,更新发生的时间取决于 Binding 的 UpdateSourceTrigger 属性的值

属性 UpdateSourceTrigger 的枚举值
PropertyChanged更改 target 属性后,将立即更新 source。
LostFocus更改 target 属性后,一旦 target 在窗口中失去焦点,就会更新 source 属性。
Explicit仅当代码显式调用 UpdateSource 方法时,才会更新 source 属性。
如  获取 target 属性的 BindingExpression 并调用其 UpdateSource 方法

3.Data Converters 数据转换器

使用数据转换器允许 在 源 和 目标 之间操作数据

数据转换器类 必须使用 ValueConversion 属性,并且必须实现 IValueConverter 接口。

4.多重绑定

图中在 TextBox 中输入的值被 Label 用作其 Content 和 FontSize 设置。

 两个 BindingExpression使用同一个 Binding 对象

图中 Label 的 Content 和 FontSize 属性共享相同的源,即 TextBox.Text。

5. 源对象 为非 UIElement 派生的 WPF 元素

源对象可以是任何类型,但 Path 必须始终指向公共属性。

 5.Data Contexts 数据上下文

当许多绑定使用相同的源对象时,您可以为绑定指定 DataContext。从 FrameworkElement 派生的每个类都有一个 DataContext 属性。有关使用 DataContext需要了解的重要事项如下:

  • 您需要在要绑定的元素上方的 树中设置元素的 DataContext 属性,并使用对源对象的引用来设置该属性。
  • 不要设置binding类实例 的 Source 属性,除非要使用其他的源。
  • 当系统发现 Binding 类实例 的 Source 属性 没有被设置时,它会开始在元素树中搜索设置了 DataContext 属性的元素。如果找到一个,则使用该值作为绑定的源。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值