UWP 开发初阶 Chapter 12
in 初阶
上篇回顾
前面两篇都讲了 Data Binding(数据绑定)的应用,先是对于 ListView 的简单数据绑定,然后是更为复杂的、自定义类型的数据绑定。
本篇正文
今天我们继续来讲数据绑定。今天将补充一些之前遗漏的知识点,并且讲一下控件之间的数据绑定。
数据绑定的模式(mode)
先前的文章中遗漏了关于数据绑定模式的介绍。数据绑定其实分为三种模式,分别是 OneTime,OneWay,TwoWay。
OneTime表示一次性的绑定。也就是说当你编译的时候,编译器完成了你所要求的绑定以后,便不再进行新的绑定。也就是说,即便绑定的数据改变了,UI 上也不会发生变化。OneWay表示单向的数据绑定,比如一个<TextBlock Text={x:Bind sampleStr, mode="OneWay"}/>,其中将Text属性和名为sampleStr的变量绑定在一起,同时这时的模式是OneWay的,那么这时候当sampleStr变化时,就会反映到 UI 上。TwoWay当然就表示双向的数据绑定了。如果理解了单向绑定了,那么这个也很好理解。我在这里就不做过多的讲解,因为今天也会提到。
不同绑定方式的默认绑定模式
x:Bind如果不写明mode="...",那么默认是OneTime的Binding如果不注明,那么默认是OneWay的
实现控件之间的绑定 (Element Data Binding)
今天,我们来实现一下控件之间的绑定。这里以 TextBox 和 TextBlock 为例子,实现在 TextBox 内写字,TextBlock 中实时显示相应的文字。
在
.xaml文件中新建TextBox和TextBlock,这里不详解,看代码理解:
解释:其中
TextBox要给它一个Name,我们绑定的时候会用到Name。图中的代码中TextBox并没有加上TextWrapping的属性,记得自己操作的时候设置为Wrap。然后在
TextBlock中绑定Text属性,代码如下:<TextBlock Text="{Binding ElementName=MyTextBox, Path=Text}"/>解释:这里使用了
Binding而非x:Bind,因为x:Bind不能简单的实现。使用x:Bind的话,即便设置为OneWay,仍需要一些特殊的处理。这里就不做详细介绍啦!其中ElementName后面就是我们要绑定的控件的名字,Path后面就是需要绑定的相对应的属性。运行一下!效果如下!

实现控件之间的双向绑定(不完美)
下面简单介绍一下,控件之间的双向绑定。这里是简单介绍,因此效果不是最理想的。更合理的方式,需要引入 DataContext 的概念,下次有机会再讲。
在
.xaml文件中建立两个TextBox,并进行如下的绑定:
运行一下,效果如下:

解释:不难发现,这里面并不是我们真正想要的结果。在第一个
TextBox中输入的结果,并不能立刻显示到右侧的TextBox。其实一般情况下,双向绑定也并不推荐直接在控件之间使用,而应该多个控件同时双向绑定至.xaml.cs中的数据。因此这里只是简单的介绍。
结语
今天就讲到这儿。x:Bind 和 Binding 的本质区别其实在于,x:Bind 的绑定行为是在编译时进行的,而 Binding 是在软件运行时(runtime) 进行的。因此两者用法上的差别还是存在的。其实两个通过一定的方法都能实现相同的功能,但是操作上可能需要花些时间。
好啦!下篇见!