码迷,mamicode.com
首页 > 其他好文 > 详细

Binding的数据转换

时间:2015-10-10 16:54:47      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:

  当Source端Path所关联的数据与Target端目标属性数据类型不一致时,就需要进行转换。如果是基本类型的转换,WPF就替我们做了,但下面几种情况,就需要我们自己写数据转换器:

  • Source里的数据是Y、N和X三个值,UI上对应的是CheckBox,需要把三个值映射为它的IsCheck属性;
  • 当TextBox里已经输入了文字时用于登录的Button才会出现,这是需要把String转换为Bool;
  • Source里的数据是枚举或String,UI上对应的是显示头像的Image控件,这时需要把值转换为图片的URI。

  手动编写转换器就要创建一个类并继承IValueConverter接口。IValueConverter接口定义如下:

    //     提供一种将自定义逻辑应用于绑定的方式。
    public interface IValueConverter
    {
        // 摘要: 
        //     转换值。
        //
        // 参数: 
        //   value:
        //     绑定源生成的值。
        //
        //   targetType:
        //     绑定目标属性的类型。
        //
        //   parameter:
        //     要使用的转换器参数。
        //
        //   culture:
        //     要用在转换器中的区域性。
        //
        // 返回结果: 
        //     转换后的值。 如果该方法返回 null,则使用有效的 null 值。
        object Convert(object value, Type targetType, object parameter, CultureInfo culture);
        //
        // 摘要: 
        //     转换值。
        //
        // 参数: 
        //   value:
        //     绑定目标生成的值。
        //
        //   targetType:
        //     要转换到的类型。
        //
        //   parameter:
        //     要使用的转换器参数。
        //
        //   culture:
        //     要用在转换器中的区域性。
        //
        // 返回结果: 
        //     转换后的值。 如果该方法返回 null,则使用有效的 null 值。
        object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture);
    }

  当数据从Binding的Source流向Target时,Covnert方法被调用,反之,ConvertBack方法被调用。这个两个方法参数列表一样,第一个参数为Object,保证了Convert的重用性,可在方法主体内进行类型判断;第二参数用于确定方法的返回类型;第三个参数用于把额外的信息传入方法,若需要传递多个信息则可把信息放入到一个集合对象来传入方法。

  Binding对象的Mode会影响这两个方法的调用。如果Mode为TwoWay则两个方法都有可能被调用,如果Mode为OneWay则只有Convert方法会被调用。

Binding的数据转换

标签:

原文地址:http://www.cnblogs.com/yijiaoyingbi/p/4867292.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!