如果Binding没有提供转换器,我想回到WPF会使用的任何内容.使用反射器我已经确定有一个DefaultValueConverter,但它是MS.Internal.Data的内部.
有没有一种简单的方法可以让我接触到DefaultValueConverter或做同样事情的事情?
解决方法
internal IValueConverter GetDefaultValueConverter(Type sourceType,Type targettype,bool targetToSource);
在类MS.Internal.Data.DataBindEngine中.
您将获得当前DataBindEngine以使用静态内部属性运行线程
internal static DataBindEngine CurrentDataBindEngine
始终在DataBindEngine类中.
问题是班级是内部的!
我还看了看是否有一些公共使用该方法,但实际上该方法和默认值转换器类(有多个!)仅在内部数据绑定类中使用,所以,没有出路,抱歉.
您可以使用反射来访问内部成员,但这将是一个非常糟糕的脏黑客!
为此,访问静态属性DataBindEngine.CurrentDataBindEngine,然后访问方法GetDefaultValueConverter,始终使用反射.
使用属性[Obsolete] :)包装静态函数
您可以尝试理解为什么它会给您错误或编写可以处理特殊情况的代码.他们的代码非常复杂且相互关联,我不建议复制他们的代码.
有时WPF让我生气,很多与数据绑定相关的东西都是隐藏的,内部的或不够通用的,这是一个我不理解的非常糟糕的设计选择.
有时旧的TypeConverter就够了.这取决于你要做什么.
public static object MyConvert(object value,Type t) { TypeConverter tc = TypeDescriptor.GetConverter(t); return tc.ConvertFrom(value); }
您还可以尝试使用IConvertible的静态方法Convert.ChangeType.
我想问题不在于转换对象而是将其转换为依赖属性(或反之亦然)使用的值.
为此目的,有公共类XamlValueConverter,默认值转换器也在内部使用.
然而,这将变得复杂,所以…不是解决问题的真正简单方法.
正如梅林所说,我开始相信反思可能是更合适的方式.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。