Конвертер для ComboBox в Silverlight 4 - PullRequest
3 голосов
/ 05 мая 2011

Я пытаюсь выбрать элемент ComboBox, чтобы установить сохраненное значение из базы данных.

В базе данных сохраняется «I» или «D», а преобразователь возвращает «Прямой» или «Косвенный».

ComboBox имеет два элемента ComboBox со значениями «Прямой» и «Косвенный».

Вот код, который я думал, что он будет работать:

<ComboBox Name="cbMode" 
SelectedValue="{Binding Context.mode, Converter={StaticResource ModeConverter}, Mode=TwoWay}" >
       <ComboBoxItem Content="Direct" />
       <ComboBoxItem Content="Indirect" />
</ComboBox>

Я знаю, что он возвращает "Косвенный", но он не выбран.

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

Как мне это попробовать? Должен ли я сделать SelectedIndex с преобразователем чисел ??

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 05 мая 2011

Обычно я пытаюсь перехватить подобные проблемы на своем уровне доступа к БД.Вы ограничены со стороны разработчика приложений БД.Когда вы получаете ваши данные, я бы конвертировал из I / D в косвенный / прямой.Когда вы установите ваши данные, я просто переверну это.Позволяет закодировать ваше приложение в соответствии с тем, что имеет смысл.

Некоторые люди называют это кодированием, ориентированным на приложения, и это значительно облегчило мою жизнь.

0 голосов
/ 06 мая 2011

Наконец я использовал не слишком крутое решение (но лучше, чем другие варианты).

Я связываю выбранный элемент следующим образом:

<ComboBox Name="cbMode" 
SelectedIndex="{Binding Context.mode, Converter={StaticResource ModeConverter}, Mode=TwoWay}" >
       <ComboBoxItem Content="Direct" />
       <ComboBoxItem Content="Indirect" />
</ComboBox>

И просто изменил конвертер, чтобы он возвращал 0, если это был D, и 1, если это был I.

Если вы найдете лучшее решение, пожалуйста, дайте мне знать; -).

0 голосов
/ 05 мая 2011

http://johnpapa.net/binding-to-silverlight-combobox-and-using-selectedvalue-selectedvaluepath-and-displaymemberpath

Создайте объект, который представляет «вещь» в вашем столбце (это режим?), А затем привяжите его, используя формулу в сообщении блога выше.Класс Mode будет иметь атрибут, представляющий типы.

У меня возникли проблемы с привязкой к обычному элементу управления ComboBox, если значение Context.mode равно нулю.Это нарушает привязки.3-я часть списка, как у Терейка, решит эту проблему.Если повезет, SL5 исправит это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...