Итак, в Интернете и StackOverflow есть много приятных ответов о том, как привязать combobox к свойству enum в WPF. Но в Silverlight отсутствуют все возможности, которые делают это возможным:( Например:
- Вы не можете использовать общий
EnumDisplayer
-styleIValueConverter
, который принимает параметр типа, поскольку Silverlight не поддерживаетx:Type
. - Вы не можете использовать
ObjectDataProvider
, как в этот подход, поскольку он не существует в Silverlight. - Вы не можете использовать собственное расширение разметки, как в комментариях к ссылке из # 2, так как расширения разметки не существуют в Silverlight.
- Вы не можете выполнить версию # 1 с использованием генериков вместо свойств
Type
объекта, поскольку generics не поддерживаются в XAML (а хаки, чтобы заставить их работать, все зависит от расширений разметки, не поддерживаемых в Silverlight).
Массивный сбой!
Как я вижу, единственный способ сделать эту работу - либо
- Обманите и привяжите свойство string в моей модели ViewModel, чей сеттер/получатель выполняет преобразование, загружая значения в ComboBox с использованием кода в представлении.
- Создайте пользовательский
IValueConverter
для каждого перечисления, к которому я хочу привязать.
Существуют ли какие-либо альтернативы, которые являются более универсальными, т.е. не требуют много раз писать один и тот же код для каждого перечисления, которое я хочу? Я полагаю, я мог бы сделать решение № 2, используя общий класс, принимающий enum как параметр типа, а затем создайте новые классы для каждого перечисления, которое я хочу, просто
class MyEnumConverter : GenericEnumConverter<MyEnum> {}
Каковы ваши мысли, ребята?