У меня есть модель со свойством enum (в данном случае относится к Правилам экспортного контроля). При отображении значения для пользователя, я хочу показать соответствующую строку. Иногда это происходит в ComboBox (где пользователь может выбрать значение), а иногда - в TextBlock (где оно доступно только для чтения).
Пример: для ExportRegulationType.EAR
я хочу отобразить "EAR"
, а для ExportRegulationType.DoNotExport
я хочу отобразить "Do Not Export"
. Обратите внимание, что у меня нет потребности в локализации языка, но я осознаю проблему ...
В настоящее время в моем ViewModel есть свойство, которое возвращает строку на основе текущего значения перечисления, а также другое свойство, которое возвращает Dictionary<ExportRegulationType, string>
. Для ComboBox я могу связать ItemsSource
со свойством словаря, а для TextBlocks я могу связать со свойством string. Это работает, но немного неуклюже.
Два вопроса:
1) Мне кажется, что я должен иметь возможность объявить словарь (с ключами и значениями) как статический ресурс в XAML (возможно, в App.xaml) и использовать его для ItemsSource для версии ComboBox. Тем не менее, я не могу понять, как объявить и сослаться на такую вещь. Как я могу это сделать?
2) Предполагая, что все вышеперечисленное выполнено, я думаю, я мог бы также установить привязку к текстовому блоку, поэтому, основываясь на свойстве enum, он будет искать строку в словаре.
Я видел следующие вопросы, относящиеся к статическому или динамическому значению перечисления. Первое неадекватно, а второе не отвечено ...
Они должны быть только для XAML и позволят мне удалить методы из моей ViewModel (имея только одно открытое перечисляемое свойство ExportRegulationType
. Возможно ли это?
Редактировать: Дополнительная информация:
В приложении у меня будет много разных наборов видов, моделей и моделей представления. Тем не менее, поскольку правила экспортного контроля являются распространенным и последовательным требованием, я использую композицию, чтобы сохранить ее СУХОЙ. т.е. модели A и B обе имеют модель ExportControl. Модели ViewModel A1, A2, B1 и B2 будут иметь ExportControlViewModel. Представления будут иметь элементы управления, связанные с ExportControlViewModel их ViewModel. Представления будут иметь либо ComboBox, либо TextBlock, но не оба (в зависимости от того, может ли пользователь изменить значение).