UWP - 绑定Enum差异

时间:2016-09-02 19:21:36

标签: c# enums windows-runtime uwp winmd

我遇到了一个非常有趣的问题。

假设您在UWP应用中拥有以下XAML页面内容:

<ContentControl Content="{x:Bind ApplicationDataLocalityEnum}" />
<ContentControl Content="{x:Bind FontStyleEnum}" />

在页面的代码隐藏中包含以下属性:

    public ApplicationDataLocality ApplicationDataLocalityEnum { get; } =
               ApplicationDataLocality.Local;

    public FontStyle FontStyleEnum { get; } = 
               FontStyle.Normal;

预期的结果是,应用会显示&#34;本地&#34; &#34;正常&#34;。

实际结果如下:

enter image description here

这背后的原因是什么?我对此非常好奇,但即使我已经尝试了很长一段时间深入研究调试器值,它也从未透露任何可能导致这种情况发生的事情。

您可以使用我的sample project on GitHub

1 个答案:

答案 0 :(得分:2)

如果您查看FontStyle的来源(只需点击F12),您会发现它位于Windows.Foundation.UniversalApiContract.winmd。这不是.NET程序集,而是投射到.NET中的本机程序集。 IReference的MSDN说:

  

使用.NET编程时,此接口是隐藏的,开发人员应使用Nullable类。基本IDL签名显示IReference(带约束)的所有Windows运行时成员都使用可空值类型的可空语法(例如,?bool)公开。

那为什么不起作用?

答案的核心是,这不是.NET类型,并且不像.NET类型。含义ToString()本身并未实现,就好像它是enum,而是像GetType().ToString()一样,它解释了您看到的输出。

他们为什么不让它发挥作用?

要在平台方面纠正此问题,类型需要一种机制来区分数字,结构和委托。对于结构和委托,您希望ToString()返回GetType().ToString()而不是名称值;所以这种通用行为是各种选择中最常见的选择。