问题描述
我遇到了一个非常有趣的问题。
I have come across a very interesting issue.
假设您在UWP应用中有以下XAML页面内容:
Suppose you have the following XAML page content in a UWP app:
<ContentControl Content="{x:Bind ApplicationDataLocalityEnum}" />
<ContentControl Content="{x:Bind FontStyleEnum}" />
在页面的代码隐藏包含以下属性:
And in the code-behind of the page contains the following properties:
public ApplicationDataLocality ApplicationDataLocalityEnum { get; } =
ApplicationDataLocality.Local;
public FontStyle FontStyleEnum { get; } =
FontStyle.Normal;
预期的结果是,该应用将显示本地和正常。
Expected result would be, that the app would display "Local" and "Normal".
实际结果如下:
这是什么原因?我很好奇,但即使我已经尝试了很长时间的调试器值,它从来没有透露任何可能导致这种情况的事情。
What is the reason behind this? I am very curious about it, but even though I have tried digging into debugger values for a long time, it never revealed anything that could cause this.
你可以玩耍使用我的。
推荐答案
如果您查看 FontStyle
的来源(只需点击F12),您会发现在 Windows.Foundation.UniversalApiContract.winmd
中。这不是.NET程序集,而是.NET中投射的本机程序集。 MSDN for 说:
Should you look into the source of FontStyle
(just hit F12) you will find it is in Windows.Foundation.UniversalApiContract.winmd
. This is not a .NET assembly, but a native assembly projected into .NET. MSDN for IReference says:
为什么不起作用?
答案的核心是,这不是.NET类型,像.NET类型。意义 ToString()
本身不是像枚举
一样实现,而是像 GetType()。ToString()
,它解释了你看到的输出。
So why doesn't it work?
The heart of the answer is, this is not a .NET type and does not behave like a .NET type. Meaning ToString()
is not natively implemented as if it is an enum
but acts instead like GetType().ToString()
, which explains the output you are seeing.
要在平台方面纠正这个问题,需要一种机制来区分数字,结构和代表。在结构和代理的情况下,您将期望 ToString()
返回 GetType()。ToString()
和不是名字值所以这种通用行为是选项中最常见的选择。
To correct this on the platform side, the type would need a mechanism to differentiate between numerations, structures and delegates. In the case of structures and delegates, you would expect ToString()
to return GetType().ToString()
and not a name value; so this generic behavior is the most common choice across the options.
这篇关于UWP绑定枚举差异的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!