UWP - связывание Enum отличий

Я столкнулся с очень интересной проблемой.

Предположим, у вас есть следующее содержимое страницы XAML в приложении UWP:

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

А в коде позади страницы содержатся следующие свойства:

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

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

Ожидаемый результат будет, что приложение будет отображать "Local" и "Normal".

Фактический результат, однако, следующий:

В чем причина этого? Мне очень любопытно, но, хотя я пытался копаться в значениях отладчика в течение долгого времени, он никогда не обнаруживал ничего, что могло бы вызвать это.

Вы можете поиграть с моим примером проекта на GitHub.

1 ответ

Если вы посмотрите на источник FontStyle (просто нажмите F12), вы найдете его в Windows.Foundation.UniversalApiContract.winmd, Это не сборка.NET, а встроенная сборка, спроектированная в.NET. MSDN для IReference говорит:

При программировании на.NET этот интерфейс скрыт, и разработчики должны использовать класс Nullable. Все члены среды выполнения Windows, в которых базовая подпись IDL показывает IReference (с ограничением), вместо этого выставляются с использованием обнуляемого синтаксиса типа обнуляемого значения (например,? Bool).

Так почему это не работает?

Суть ответа в том, что это не тип.NET и не ведет себя как тип.NET. Имея в виду ToString() изначально не реализовано, как будто это enum но действует вместо этого как GetType().ToString(), который объясняет вывод, который вы видите.

Почему они не заставляют это работать?

Чтобы исправить это на стороне платформы, типу потребуется механизм, позволяющий различать нумерации, структуры и делегаты. В случае структур и делегатов, вы ожидаете ToString() возвращать GetType().ToString() а не значение имени; так что это общее поведение является наиболее распространенным выбором среди вариантов.

Другие вопросы по тегам