WinRT 替代 System.ComponentModel.TypeConverter

5

看起来似乎无法使用TypeConverter。有什么推荐的替代方法吗?

我本来想创建自己的TypeConverter类来替换它,但如果在WinRT中有更好的新方法,我会选择这种方式。还有许多其他类需要重新创建,例如所有默认类型转换器。


TypeConverter其实是一个相当复杂的API,特别是考虑到所有上游的管道;对于winrt来说,是的:它非常简洁 - 因此:为了回答你的问题,我们需要知道你需要支持哪些场景。 - Marc Gravell
将字符串转换为任何内置类型,然后再转换回字符串。这就是所有内置转换器(如StringConverter)发挥作用的地方。我还使用了TypeDescriptor.GetConverter和其他与此相关的类。我可以通过创建一个“MissingFromRt45”类集来实现我需要的功能,但看起来类列表会相当大。 - Josh Close
您认为将我正在使用的所有TypeConverter内容提取出来并更改为自定义类型转换设置是否会更有益?这样无论运行在什么版本的.NET上,都可以正常工作。 - Josh Close
1
这将是我的建议。我能理解你的痛苦:我有一些库可以在CF、常规.NET、Silverlight、Portable、Xna、RT等上工作。它可能很麻烦。 - Marc Gravell
2个回答

2
在WinRT中没有TypeConverter类,团队也没有宣布在未来的版本中包含它的计划。你有几个选择。
选项1:如果转换是作为数据绑定的一部分完成的,请使用IValueConverter接口,就像Dennis所提到的那样。
选项2:如果你是类型的创建者,可以添加自己的显式或隐式操作符来支持强制转换。

http://msdn.microsoft.com/en-US/library/xhbhezf4(v=vs.80).aspx

http://msdn.microsoft.com/en-US/library/z5z9kes2(v=vs.80).aspx

选项3:您可以创建自己的TypeConverter类。
选项4:(如果不是绑定的一部分,我会这样做)您可以添加自己的扩展方法:
static public class ConverterExtensions
{
    static public string ToFixedString(this double value)
    {
        return value.ToString("D");
    }
}

这将让您编写如下代码:
double d = 123.45;
string str = d.ToFixedString(); // str now equals "123"

1
如果目标仅是替换XAML声明中的TypeConverter使用,哪个选项更可取?我尝试过#1但没有成功,而#4则不适用。 - Jay Borseth
我非常想知道您如何实现选项3。我在UWP中找不到任何TypeConverter示例。此外,存在一个UserVoice https://wpdev.uservoice.com/forums/110705-universal-windows-platform/suggestions/9576897-implement-system-componentmodel-typeconverter-in-w - Briefkasten
随着创作者更新,类型转换器来了!http://timheuer.com/blog/archive/2017/02/15/implement-type-converter-uwp-winrt-windows-10-xaml.aspx - Briefkasten

0

有没有内置的转换器实现了这个接口? - Josh Close
WinRT更像是Silverlight,而不是WPF。因此,我认为没有任何开箱即用的转换器。 - Dennis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接