绑定如何转换不同类型的值?

问题描述

似乎有很多信息,但是我找不到确切的信息。 或者我不在那...

我试图了解Binding如何在不使用转换器的情况下转换不同类型的值。 我发现的唯一通用解决方案是通过中间转换为字符串。

比方说,有一个DependencyProperty类型为double。 我们可以将其绑定到Int32类型的属性,这样的绑定才能正常工作。

如何在不引发异常的情况下在代码中执行相同操作? 绑定还会使用中间转换为字符串吗?

演示代码:

        int i = 10;

        bool x = i is double; // false

        bool y = TypeDescriptor.GetConverter(typeof(double)).IsValid(i); // false

        bool z = TypeDescriptor.GetConverter(typeof(double)).IsValid(i.ToString()); // true

该方法的当前实现,但我真的不喜欢它:

    public static TResult Convert<TResult>(object value)
    {
        string str = value.ToString();
        if (TypeDescriptor.GetConverter(typeof(TResult)).IsValid(str))
            return (TResult) TypeDescriptor.GetConverter(typeof(TResult)).ConvertFrom(str);
        return default;
    }

还有一种变体来创建隐藏的DependencyProperty并将其用于转换。 但是仅仅为了转换机制而从DependecyObject继承对我来说似乎是个坏主意。

我将再次澄清,我知道转换值的不同方法,包括从问题flagged as duplicate开始,但是我的解决方案仅针对WPF。

因此,我对任何一种方法都不感兴趣,即DependencyProperty绑定使用的方法。 在源代码中,我找不到绑定期间在何处以及如何转换值。

因此,我要求澄清这种机制或提供使用绑定的源代码的链接。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...