zoukankan      html  css  js  c++  java
  • 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 class DictionaryItemConverter : IValueConverter

    {

    public string ValueType { getset; }

    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的区别很有帮助。

  • 相关阅读:
    12C 中,发生脑裂时,节点保留策略
    如何修改集群的公网信息(包括 VIP)
    从 ASH 找到消耗 PGA 和 临时表空间 较多的 Top SQL_ID
    Oracle SCN详解
    10046 trace
    使用trace文件定位ORA-00060问题
    (转)计算机漏洞安全相关的概念POC 、EXP 、VUL 、CVE 、0DAY
    PowerShell 相关常用命令(update...)
    (转)主从同步常遇见问题处理-线上MYSQL同步报错故障处理总结
    pentestbox 安装后的基本设置
  • 原文地址:https://www.cnblogs.com/liping13599168/p/1726784.html
Copyright © 2011-2022 走看看