Silverlight 中 IValueConverter 与 TypeConverter 的区别
翻译的原文出处:http://bryantlikes.com/SilverlightIValueConverterVsTypeConverter.aspx
这两个东西对于我们来说不是很清晰,所以我决定写篇博客来介绍下它们。IValueConverters 和 TypeConverters 都用于转换,但是它们是不同的概念。
TypeConverters用于Xaml解析器将xaml文档中的数据转换为CLR对象中的数据,所以当你设置Height=”100”的时候,高度显然不能够作为一个字符串,必须把它转换为double类型。这就需要一个类型转换器,类型转换器也是单向的,一旦从xaml被转换到CLR的值是无法反向的,自定义的类型转换器必须定义在类上否则Xaml解析器无法知道怎么去解析该值。这里有一篇很好的文章介绍了更详细的信息。
IValueConverters用于在数据绑定方面。通常它们在xaml文件中作为一个静态资源被创建,然后再在绑定中进行引用。相比于类型转换器,值转换器可以进行双向绑定。值转换器可以更加动态地指定在绑定上,而类型转换器做不到。值转换器也更加灵活,它可以通过转换参数ConverterParameter传递参数值。你也可以读这篇文章来了解你所兴趣的。
一个很好的例子是出现在这个Silverlight论坛的问题,怎样让Silverlight的值转换器更易扩展。Odegaard(人名)试着绑定一个Dictionary对象,获取键值中的一个并正确地显示在TextBlock上。可是即使WPF支持这种属性包类型的绑定,在Silverlight没有办法直接实现。这里你需要一个IValueConverter。在这种情况下,值转换器在字典中得到键值并且返回对于的值。你可以看下这段代码(尽管问题并不像我实现的那样,因为问题太复杂了,我想我还是弄个简单些的)
我试着找出一个为类型字典更加通用的做法,但是我所能做的最好的办法是值类型已经被分配,但键值仍然必须是一个字符串。

{
public string ValueType { get; set; }
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
Type generic = typeof(Dictionary<,>);
Type[] typeArgs = new Type[] { typeof(string), Type.GetType(ValueType) };
Type dictType = generic.MakeGenericType(typeArgs);
if (dictType.IsInstanceOfType(value))
{
return dictType.GetMethod("get_Item").Invoke(value, new object[] { parameter });
}
throw new InvalidCastException(string.Format("Dictionary is not of type Dictionary<stirng,{0}>.", ValueType));
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
所以这对于你理解IValueConverters与TypeConverter的区别很有帮助。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫