#c# #wpf #xaml #data-binding #enums
#c# #wpf #xaml #привязка к данным #перечисления
Вопрос:
Мне нужно привязать an Enum
к WPF ComboBox
, я ТОЧНО выполнил шаги, приведенные в замечательном сообщении здесь (лучший способ), но я всегда получаю эту ошибку:
Failed to create a 'Type' from the text 'local:AppLanguage'
Пример проекта, который содержит ошибку здесь
Заранее спасибо
Комментарии:
1. Разве ты не можешь просто
[ComboBox].ItemsSource = Enum.GetValues(typeof(Applanguage));
?2. Пожалуйста, взгляните brianlagunas.com/a-better-way-to-data-bind-enums-in-wpf
3. Это не совсем необходимо 🙂 Я имею в виду, вам нужны привязки здесь? Это выглядит как простой селектор. Итак, добавление типа enum непосредственно к элементам довольно просто. Если вам нужно дополнительное описание, конвертера достаточно. Если вы хотите добавить это
EnumBindingSourceExtension
, убедитесь, что оно доступно. Создайте для него класс с тем же именем, что и для перечисления. Тогда то, что вы нашли в этом примере, будет работать «из коробки», просто добавляяItemsSource="{Binding Source={local:EnumBindingSource {x:Type local:Applanguage}}}"
к разметке.4. Под созданием класса для него я подразумеваю добавление файла класса в проект и вставку / перезапись его имени по умолчанию с вашим
EnumBindingSourceExtension
объектом класса. В конце концов, вы можете обрабатывать вложенные классы в разметке, но на самом деле вам это не нужно.5. Это
Binding
избыточно. Просто используйте расширение напрямую. Невозможно помочь без каких- либо подробностей. Пожалуйста, опубликуйте XAML и определение перечисления и расширения. Тогда я смогу вам помочь. Не ожидайте, что люди перейдут по вашей ссылке, чтобы загрузить ваш проект и запустить его на своих машинах. Всегда публикуйте минимальный жизнеспособный пример, который воспроизводит вашу проблему.
Ответ №1:
Тип перечисления является а) вложенным и б) имеет строчную букву «l», поэтому на самом деле называется MainWindow.Applanguage
.
Чтобы записать это в XAML, вы должны использовать символ плюс для вложенного разделителя, например:
{x:Type local:MainWindow Applanguage}
Комментарии:
1. Тогда вы изменили что-то еще в решении с момента его загрузки, неправильно вставили приведенный выше код в файл XAML или не создали свои изменения.