Привязка перечисления к списку со списком в WPF

#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 или не создали свои изменения.