WPF自学入门(七)WPF 初识Binding

       今天记录一下Binding的基础和具体的使用方法,提及这个Binding,在WPF中,Binding是很重要的特征,在传统的Windows软件来看,大多数都是UI驱动程序的模式,也能够说事件驱动程序,这个程序模式在工做过几年的程序员中是根深蒂固的,WPF做为Winform的升级,它把UI驱动程序完全改变了,核心回到了数据驱动程序的模式上面,这样,程序就回到了算法和数据。数据,才是真正须要重点处理的!程序员

        Binding在数据驱动程序模式中起着相当重要的做用,它最为重要的一个特色就是通信,链接着前台与后台。首先看一下Binding最简单的使用方法:算法

1、元素之间的绑定ide

 

    这里有3个控件,Slider,TextBox,Label,其中TextBox和Label都做为目标,Slider都做为数据源,把Slider中的值交由两个控件体现,移动滑块,TextBox会自动显示Value的值,也就是FontSize的值。由于两个绑定都设置了双向绑定,因此能够在文本框中输入值,而后丢失焦点,也能反馈回去。字体

看一下XAML中的绑定语句,这里用的ElementName就是制定要绑定的对象的名字,Path就是要绑定的依赖项属性,mode就是绑定方式,这里须要说明的是mode有五种方式:spa

(1)OneWay 单向绑定设计

(2)TwoWay 双向绑定3d

(3)OneTime,最初根据源属性值设置目标属性,之后就忽略全部改变,就是说,只进行初始化。双向绑定

(4)OneWayToSource,这和OneWay相反orm

(5)Default,这是默认形式,它根据目标属性自动设置。对象

      若是把TextBox中的值修改为其余的,滑条位置没有改变,字体大小也没有改变,这是什么回事呢?当TextBox失去焦点的时候,就会发生相应的改变了。这是由于这个绑定中的默认更新机制,更新机制Binding.UpdateSourceTrigger,这个属性有4个枚举值

(1)PropertyChange,当值改变的时候,就更新。

(2)LostFocus,当时去焦点的时候更新.

(3)Explicit,当调用BingingExpression.UpdateSource()方法的使用更新,其余状况不会更新。

(4)Default,默认形式

注意:以上这四种更新机制的设定,只会影响源数据,而不会影响目标数据。

 

二:元素自身的绑定

     除了能够绑定别的元素,也能够绑定自身的其余属性,例如Slider自身的Opacity属性和自身的Value属性绑定,当滑块向左移动的时候,会逐渐隐藏起来。

三:后台数据与元素之间的绑定

     前面说了元素之间的绑定和元素自身的绑定,最后重点来了后台数据和前台元素的绑定,这种绑定方式很好地体现了数据驱动程序的运行模式。

     首先新建Person类

 

    页面后台代码

 

显示效果:

 

       数据的绑定的方式已经写完了。Binding是一条高速公路,那么为了提升数据传递的合法性和有效性,咱们要在这条高速公路中创建起一系列的关卡,有的用来转换数据,有的用来校验数据,下面就说一下Binding对数据的校验和转换。

(一)Binding的数据校验

     Binding的数据校验工做是派生自ValidationRule类,而且对Validate方法进行重写的自定义类!看一下实例:

 

      先设计一个检验类,它继承ValidationRule类而且重写Validate方法。使用这个类的时候是建立Binding的时候设置校验的。

代码以下:

 

好了,看一下结果

 

      由于设置了值传过去的值不能是超过0~100之间,因此当超过了就显示红色边框。在Binding中,默认是会认为数据源是确定正确的,因此若是将TextBox做为数据源,而Slider做为目标,数据源输入错误是没有显示的,那么怎么解决这个问题呢,设置VdataValidationRule.ValidatesOnTargetUpdated = true;

 

( 二)Binding的数据转换

       Binding还有另一种机制称为数据转换,当Source端指定的Path属性值和Target端指定的目标属性不一致的时候,咱们能够添加数据转换器(Convert)。上面咱们提到的问题实际上就是double和stirng类型相互转换的问题,由于处理起来比较简单,因此WPF类库就本身帮咱们作了,但有些数据类型转换就不是WPF能帮咱们作的了,当遇到这些状况,咱们只能本身动手写Converter,方法是建立一个类并让这个类实现IValueConverter接口。

 

        这个就是日期转换类,它有两个方法:

       1.当值从绑定源传播给绑定目标时,调用方法Convert

       2.当值从绑定目标传播给绑定源时,调用此方法ConvertBack,方法ConvertBack的实现必须是方法Convert的反向实现。

        这两个方法分别在里面写入怎么转换,转换成什么类型就是返回类型。

下面就是使用:

 

好了,把这个绑定的Converter属性设置成咱们设计的转换类的实例就能够了。看一下程序的界面

相关文章
相关标签/搜索