Как заставить wpf combo box тянуть специальное свойство - PullRequest
0 голосов
/ 15 ноября 2018

Я хочу использовать поле со списком для ввода простого целочисленного значения.

В моем приложении некоторые числовые значения имеют специальные значения, но любое числовое значение должно быть в состоянии вводиться (вводиться).

Поэтому в поле со списком должно отображаться поле редактирования с выпадающимстрелка вниз вправо.

Если щелкнуть стрелку раскрывающегося списка, раскрывающийся список должен содержать список объяснений (строк) для тех специальных числовых значений, которые имеют специальные значения(например, "103 - Wait for next turn").

Если пользователь щелкает запись из раскрывающегося списка (вместо непосредственного ввода соответствующего значения), соответствующее числовое значение должно быть перенесено в поле редактирования.

Я пробовал следующее:

  • Я установил для свойства IsEditable ComboBox значение true
  • Я связал свойство ItemsSource с коллекцией объектов, которые имеюткак числовое свойство (с именем "Value"), так и строковое свойство (с именем "Explanation").
  • Я установил для свойства DisplayMemberPath значение "Explanation" (имя свойства строки указано выше)

Имея это, я могу свободно набирать любое число, которое мне нравится,и объяснение строки каждого специального номера правильно отображается в раскрывающемся списке.Это именно то, что я хочу.

Однако, когда я выбираю одно из объяснений из раскрывающегося списка, это строка объяснения , которая передается в поле редактирования, не соответствующее числовое значение.

Вопрос: как сделать так, чтобы поле со списком передавало числовое свойство ("Value") вместо текста объяснения, когда я щелкаю элемент из раскрывающегося списка?вниз список?

1 Ответ

0 голосов
/ 16 ноября 2018

Используйте шаблон данных для отображения текста объяснения в раскрывающемся списке.

Для отображения значения в поле для редактирования текста установите для присоединенного свойства TextSearch.TextPath для ComboBox имя свойства значения в типе «специальные значения».

Если ComboBox не должен автоматически заполнять возможные специальные значения при вводе числа, установите для его свойства IsTextSearchEnabled значение false . (Обратите внимание, что это также отключит автоматический выбор специального значения в раскрывающемся списке, если вы введете его в поле редактирования.)

Таким образом, определение ComboBox должно выглядеть примерно так:

<ComboBox ItemsSource="{Binding ...}"
          IsEditable="True"
          TextSearch.TextPath="Value"
          IsTextSearchEnabled="False">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Explanation}" />
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...