WPF的Binding基础(一)

在C#代码中,MainWindow的构造器中“InitializeComponent();”是自动生成的代码,用途是初始化UI元素。

使用Binding连接数据源与Binding目标:

1、大多数情况下Binding的源是逻辑层的对象,Binding的目标是UI元素。

BindingOperations.SetBinding 方法 (DependencyObject, DependencyProperty, BindingBase)

public static BindingExpressionBase SetBinding(
	DependencyObject target,
	DependencyProperty dp,
	BindingBase binding
)

参数

target
Type: System.Windows.DependencyObject

绑定的绑定目标。

dp
Type: System.Windows.DependencyProperty

绑定的目标属性。

binding
Type: System.Windows.Data.BindingBase

描述绑定的 BindingBase 对象。

返回值
Type: System.Windows.Data.BindingExpressionBase

为指定的属性创建且与之相关联的 BindingExpressionBase 的实例。 BindingExpressionBase类是 BindingExpressionMultiBindingExpression 和 PriorityBindingExpression 的基类。

2、把控件作为Binding源与Binding标记扩展。
注意:在c#代码中可以访问XAML代码中声明的变量但XAML代码中却无法访问C#代码中声明的变量。
<Slider x:Name="slider" Maximum="100" Minimum="0" Margin="5"/>
<TextBox x:Name="textBox" Text="{Binding Path=Value,ElementName=slider}" BorderBrush="Black" Margin="5"/>
与之等价的C#代码是:
this.textBox.SetBinding(TextBox.TextProperty,new Binding("Value"){ElementName="slider"});
在C#代码中可以直接访问控件对象,一般不会使用Binding的ElementName属性,而是直接把对象赋值给Binding的Source属性。
因为Binding类的构造器本身可以接收Path作为参数,所以也常写为:
<TextBox x:Name="textBox" Text="{Binding Value,ElementName=slider}" BorderBrush="Black" Margin="5"/>
3、控制Binding的方向及数据更新
(1)控制Binding数据流向的属性是Mode(BindingMode枚举类型,取值为TwoWay、OneWay、OnTime、OneWayToSource和Default,Defaultzhi值是指Binding的模式会根据目标的实际情况来确定)。
小技巧:在运行窗口上,按一下Tab键,可以让焦点离开相应控件。
(2)属性UpdateSourceTrigger,它的类型是UpdateSourceTrigger枚举,可取值为PropertyChanged、LostFocus、Explicit、Default。举例:对于TextBox默认值Default的行为与LostFocus一致,只需要把这个属性改为PropertyChanged,与之关联的控件的某属性值将随TextBox的输入而改变。
(3)NotifyOnSourceUpdated和NotifyOnTargetUpdated两个bool类型的属性,如果设为true,则当源或目标被更新后Binding会激发相应的SourceUpdated事件和TargetUpdated事件,实际工作中,我们可以通过监听这两个事件来找出有哪些数据或控件被更新了。
4、Binding的路径Path指定Binding关注哪个属性的值
(1)Path的实际类型是PropertyPath。
(2)Binding还支持多级路径(通俗地讲就是一路“点”下去)。比如让一个TextBox显示另外一个TextBox的文本长度:
Text="{Binding Path=Text.Length,ElementName=textBox1,Mode=OneWay}"
(3)集合类型的索引器(Indexer)又称为带参属性,也能作为Path来使用。Text="{Binding Path=Text.[3],ElementName=textBox1,Mode=OneWay} ",Text与[3]之间的“.”省掉,它一样可以正确工作。
(4)当使用一个集合或者DataView作为Binding源时,把它的默认元素当作Path使用,语法如下:
List<string> stringList = new List<string>(){"Tom","Tim","Blog"};
this.textBox.SetBinding(TextBox.TextProperty,new Binding("/")){Source=stringList});
this.textBox.SetBinding(TextBox.TextProperty,new Binding("/Length")){Source=stringList,Mode=BindingMode.OneWay});
this.textBox.SetBinding(TextBox.TextProperty,new Binding("/[2]")){Source=stringList,Mode=BindingMode.OneWay});
如果集合元素的属性仍然还是一个集合,想把子级集合中的元素当作Path,则可以使用多级斜线的语法(即一路“斜线”下去)。
(5)“没有Path”的Binding
Binding源本身就是数据且不需要Path来指明。string、int等基本类型就是这样,这时只需将Path的值设置为“.”就可以了。在XAML代码中可以省略不写“.”,C#代码就不能省略。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值