【问题标题】:WinRT Replacement for System.ComponentModel.TypeConverterSystem.ComponentModel.TypeConverter 的 WinRT 替换
【发布时间】:2012-09-11 20:01:27
【问题描述】:

看起来TypeConverter 不可用。建议用什么来代替它?

我打算去创建自己的TypeConverter 类来替换它,但如果在 WinRT 中有新的或更好的方法来做到这一点,我会走那条路。我还需要重新创建许多其他类;像所有的默认类型转换器一样。

【问题讨论】:

  • TypeConverter 实际上是一个非常复杂的 API,尤其是考虑到所有上游管道时;对于 winrt,是的:它非常小 - 所以:要回答您的问题,我们需要知道您需要支持哪些场景。
  • 将字符串转换为任何内置类型并返回字符串。这是所有内置转换器(如StringConverter)将发挥作用的地方。我也在使用TypeDescriptor.GetConverter 以及围绕这些使用的任何其他类。我可以通过创建一组“MissingFromRt45”类来实现我需要的这些功能,但看起来类列表会非常大。
  • 您认为将我正在使用的所有TypeConverter 东西都取出并将其更改为自定义类型转换设置会更有益吗?这样,无论它在什么版本的 .NET 上运行,它都可以工作。
  • 这是我的建议,是的。我感觉到你的痛苦:我有在 CF、常规 .NET、Silverlight、Portable、Xna、RT 等上工作的库。它可以是 PITA。

标签: c# .net windows-8 windows-runtime


【解决方案1】:

WinRT 中没有 TypeConverter 类,并且团队尚未宣布任何将其包含在未来版本中的计划。您有多种选择。

选项 1:如果要将转换作为数据绑定的一部分进行,请使用 Dennis 提到的 IValueConverter 接口。

选项 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"

【讨论】:

【解决方案2】:

使用IValueConverter接口。

【讨论】:

  • 有没有实现这个接口的内置转换器?
  • WinRT 比 WPF 更像 Silverlight。所以,我不认为有任何开箱即用的转换器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-11
  • 2013-06-09
  • 1970-01-01
  • 2012-11-05
  • 2012-08-15
  • 1970-01-01
相关资源
最近更新 更多