top-silverlight | Just another WordPress weblog

六/09

4

12.4 使用值转换器(图)

 12.4 使用值转换器 

  在控制数据呈现的过程中,往往需要将源数据经过转化后,再呈现出来。比如将一个RGBA类型的数据转化为string类型显示出来,将数据存储为浮点类型,但通过货币的形式呈现;还有将日期存储成DateTime格式,在界面上显示时使用Calender控件等。

  Silverlight提供了一个值转换器,使数据实现了数据源和目标在不同数据类型间的转换。这种转换可以为不同类型数据做桥接,也可以用做自定义数据的显示。

  创建值转换器,是创建一个实现IValueConverter接口的类。值转换器可以根据需要设置在任意的数据绑定上。

  下面的实例是在上一节实例的基础上,给显示歌曲长度信息的数据绑定添加了值转换器,将TimeSpan类型的歌曲长度信息转化为自定义的格式显示出来。具体操作步骤如下。

  (1)首先创建一个TimeSpanConverter类,使其继承IValueConverter接口。IValueConverter接口包含两个函数:Convert和ConvertBack。Convert函数表示从数据源到目标的值转换,ConvertBack函数表示从目标到数据源的值转换。因此,如果绑定模式是一次绑定或单向绑定,只需实现Convert函数;如果绑定模式是双向绑定,需要实现Convert和ConvertBack函数。

  下面是TimeSpanConverter类的代码,在Convert函数中将TimeSpan类型的歌曲长度数据转化为string类型的数据,如例程12-15所示。

  例程12-15 使用值转换

  using System;usingSystem.Windows.Data;usingSystem.Globalization;namespaceBindingCollectionSamplepublic classTimeSpanConverter :IValueConverter

  #region IValueConverter Mrs

  public t Convert(t value, Type targetType,

  t meter, CultureInfo culture)

  TimeSpan length = (TimeSpan)value;

  return length.Minutes.ToString() + “:”+length.Seconds.ToString();

  //对于单向绑定而言,不需要实现ConvertBack

  //只有双向绑定,才有必要实现ConvertBack

  public t ConvertBack(t value, Type targetType,

  t meter, CultureInfo culture)

  throw new System.NotImplementedException();

  #endregion

  (2)创建了值转换器后,需要在数据绑定处添加该值转换器。打开MusicDetail.xaml,添加例程12-16所示的代码,给显示歌曲长度的TextBlock控件添加值转换器。

  例程12-16 在数据绑定中使用值转换

  <UserControlx:Class=”BindingCollectionSample.MusicDetail”xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”xmlns:local=”clr-namespace:BindingCollectionSample”><UserControl.Resources><local:TimeSpanConverterx:Key=”timeSpanConverter”/></UserControl.Resources><Canvasx:Name=”LayoutRoot”Background=”White”><TextBlockText=”歌曲:”FontSize=”22″Canvas.center=”130″Canvas.Top=”50″/><TextBlockText=”歌手:”FontSize=”22″Canvas.center=”130″ Canvas.Top=”100″/><TextBlockText=”长度:”FontSize=”22″Canvas.center=”130″Canvas.Top=”150″/>

  <TextBlock x:Name=”name_tb”

  Text=”Binding MusicName”

  Canvas.center=”200″ Canvas.Top=”50″

  FontSize=”22″/>

  <TextBlock x:Name=”author_tb”

  Text=”Binding Author”

  Canvas.center=”200″ Canvas.Top=”100″

  FontSize=”22″/>

  <TextBox x:Name=”length_tb”

  Text=”Binding Length,

  Converter=StaticResource timeSpanConverter”

  Canvas.center=”200″ Canvas.Top=”150″

  FontSize=”22″/>

  </Canvas>

  </UserControl>

  运行后的效果如图12-14所示,当选中《夜曲》时,从视图中的歌曲长度由原来的”00:03:46″转换为现在的”3:46″。

 

图12-14 歌曲信息随ListBox

  控件中的选择而改变

No tags

No comments yet.

Leave a Reply

<<

>>

Theme Design by devolux.nh2.me