一、0,1转换成true,false用于绑定类似CheckBox中的IsChecked属性:
public class BoolConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { string s = (string)value; bool b; if (s ==null || s.Trim().Length == 0 || s == "0") b = false; else b = true; return b; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { string strValue = (bool)value?"1":"0"; return strValue; } }
二、时间字符串转换
#region 为日期定义转换器 //定义一个转换类 并被页面引用为资源 /* * IValueConverter - 值转换接口,将一个类型的值转换为另一个类型的值。它提供了一种将自定义逻辑应用于绑定的方式 * Convert - 正向转换器。将值从数据源传给绑定目标时,数据绑定引擎会调用此方法 * ConvertBack - 反向转换器。将值从绑定目标传给数据源时,数据绑定引擎会调用此方法 */ /// <summary> /// 正向转换器。将值从数据源传给绑定目标时,数据绑定引擎会调用此方法 /// </summary> /// <param name="value">转换之前的值</param> /// <param name="targetType">转换之后的类型</param> /// <param name="parameter">转换器所使用的参数</param> /// <param name="culture">转换器所使用的区域信息</param> /// <returns>转换后的值</returns> public class DateTimeConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { DateTime date = (DateTime)value; return date.ToString("yyyy-MM-dd"); } /// <summary> /// 反向转换器。将值从绑定目标传给数据源时,数据绑定引擎会调用此方法 /// </summary> /// <param name="value">转换之前的值</param> /// <param name="targetType">转换之后的类型</param> /// <param name="parameter">转换器所使用的参数</param> /// <param name="culture">转换器所使用的区域信息</param> /// <returns>转换后的值</returns> public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { string strValue = value.ToString(); DateTime resultDateTime; if (DateTime.TryParse(strValue, out resultDateTime)) { return resultDateTime; } return value; } } #endregion
使用方法如下:
首先在需要使用转换的页面中加入下语句:
xmlns:local="clr-namespace:XXX" //XXX是你Silverlight的项目命名空间
然后添加:
<UserControl.Resources>
<local:DateTimeConverter x:Key="DateTimeConverter" />
<local:BoolConverter x:Key="BoolConverter " />
</UserControl.Resources>
<CheckBox x:Name="chk1" Content="我是CheckBox" IsChecked="{Binding 数据库表字段,Convert={StaticResource BoolConverter }}" Margin="5" />
三、Image图片Source属性绑定
定义一个转换器IconConverter类
// Icon是源类型,ImageSource是目标类型。[ValueConversion(typeof(Icon), typeof(ImageSource))]
//继承了 IValueConverter
public class IconConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
Icon icon = (Icon)value;
Bitmap bitmap = icon.ToBitmap();
IntPtr hBitmap = bitmap.GetHbitmap();
ImageSource bitmapSource =
Imaging.CreateBitmapSourceFromHBitmap(
hBitmap, IntPtr.Zero, Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions());
return bitmapSource;
}
//下面的函数是为了实现上面转换的逆操作的,这里我们不需要把ImageSource再变成Icon所以没有写具体的实现
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
最后把数据再重新绑定一下,
1、添加引用:xmlns:local="clr-namespace:转换器所在命名空间"
2、添加资源:<local:IconConverter x:Key="iconConverter"/>
3、绑定转换器数据:<Image Source="{Binding Path=MenuIcon, Converter={StaticResource iconConverter}}" />
OK,问题解决了。