但是有些数据显示要求无法通过StringFormat处理,则需要使用Binding的属性Converter来处理了 —— 即通过值转换器来处理。下面我们以上面用到的时间转化为例,假如我们要在前台显示yyyyMMdd格式的日期,此时从数据源显示到界面可以正确处理,但是在界面输入,它无法正确转化为源数据,即内置的Converter不支持,此时我们就需要自己实现值转换,示例 如下:
首先定义DateConverter,实现接口IValueConverter,代码如下:
class DateConverter : IValueConverter
{
/// <summary>
/// 数据源转界面显示
/// </summary>
/// <param name="value"></param>
/// <param name="targetType"></param>
/// <param name="parameter"></param>
/// <param name="culture"></param>
/// <returns></returns>
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value.GetType() == typeof(System.DateTime))
{
return ((System.DateTime)value).ToString("yyyyMMdd");
}
else
{
return value;
}
}
/// <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)
{
if (targetType == typeof(System.DateTime) && value != null)
{
DateTime dt = DateTime.Now;
string valuestr = value.ToString();
if (DateTime.TryParse(valuestr, out dt))
{
return dt;
}
else if (valuestr.Length == 8)
{
string yearstr = valuestr.Substring(0, 4);
string monthstr = valuestr.Substring(4, 2);
string daystr = valuestr.Substring(6, 2);
if (DateTime.TryParse(string.Format("{0}-{1}-{2}", yearstr, monthstr, daystr), out dt))
{
return dt;
}
}
}
return value;
}
}
然后在Xaml文件中添加引用:
由于此处DateConvert直接定义在当前窗体类命名空间下,所以其已经默认添加了如下空间,如果定义在其他位置,则需要手动添加空间引用。










