zoukankan      html  css  js  c++  java
  • WPF自学入门(七)WPF 初识Binding

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

            Binding在数据驱动程序模式中起着至关重要的作用,它最为重要的一个特点就是通讯,连接着前台与后台。首先看一下Binding最简单的使用方法:

    一、元素之间的绑定

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

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

    (1)OneWay 单向绑定

    (2)TwoWay 双向绑定

    (3)OneTime,最初根据源属性值设置目标属性,以后就忽略所有改变,就是说,只进行初始化。

    (4)OneWayToSource,这和OneWay相反

    (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属性设置成我们设计的转换类的实例就可以了。看一下程序的界面

  • 相关阅读:
    SpringMvc框架总结
    Spring框架总结
    Redis常用数据类型
    从配置文件中获取list,set,map值
    Oracle数据库编码格式不同造成乱码
    事务
    Spring-动态代理
    关于Maven项目pom.xml文件不报错却有红叉的问题
    Spring—SSJ集成&声明式事务管理
    Spring-构造注入&注解注入&代理模式&AOP
  • 原文地址:https://www.cnblogs.com/fly-bird/p/8576748.html
Copyright © 2011-2022 走看看