面朝大海 春暖花开

天行健,君子以自强不息; 地势坤,君子以厚德载物; 宠辱不惊,闲看庭前花开花落; 去留无意,漫随天外云卷云舒。 不妄取,不妄予,不妄想,不妄求, 与人方便,随遇而安。 ——《周易》

导航

十二、数据绑定——转换器

通过上一篇文章,我们可以发现一个问题,我们仅仅给图片赋值了一个路径,然而我们可以最终显示一张图片,这期间我们并没有进行任何的转换。当然,这并不是神出来的,而是.Net框架已经在我们感觉不到的情况下帮我们转换了,但是有些类型还是无法转换的,比如说,bool类型。以下就解决这一问题。也就是要将model(后台)转换成Ui(前台)。

第一步:定义一个转换器

说明:(1)示例中IsTip是布尔类型,是Ui;隐藏/显示 是枚举类型,是model

         (2)该类一般定义在工程的Common文件夹下,命名规则是:Ui中的类型+model中的类型+Converter.cs

 

public class BoolVisibilityConverter : IValueConverter   //实现转换器接口

    {

        //Convert是将model中的类型转换成Ui中的类型

        public object Convert(object value, Type targetType, object parameter, string language)

        {

            //throw new NotImplementedException();   

          bool b = (bool)value;

            return b ? Visibility.Visible : Visibility.Collapsed;

        }

        //ConvertBack是用于双向绑定,如果不是双向绑定,此方法可以直接抛出异常即可,不用写方法体

        public object ConvertBack(object value, Type targetType, object parameter, string language)

        {

           // throw new NotImplementedException();

            Visibility v = (Visibility)value;  

           return v == Visibility.Visible;  

       }

    }

第二步:在响应的XAML中

(1)在根标签中加上 xmlns:别名="suing:工程名.文件夹名",将转换器类引入文件中。例如:xmlns:common="using:Register.Common"

(2)在根标签之下加上 <Page.Resources>
                                          <别名:转换器名  x:Key="boolVisConverter"></别名:转换器名 >
                                 </Page.Resources>

                  例如      <Page.Resources>
                                           <common:BoolVisibilityConverter x:Key="boolVisConverter"></common:BoolVisibilityConverter>
                              </Page.Resources>

(3)在控件中绑定  Visibility="{Binding IsTip,Converter={StaticResource boolVisConverter}}"

posted on 2012-12-06 21:29  gentle_girl  阅读(319)  评论(0编辑  收藏  举报