您的位置:首页 > 移动开发 > Objective-C

Silverlight中的一些Convert整理

2011-06-12 22:37 183 查看
一、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,问题解决了。




                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息