Можна редагувати ComboBox із прив'язкою до значення, якого немає в списку


81

У мене є редаговане поле зі списком, де не завжди бажаний елемент є у випадаючому списку.

Я хотів би мати можливість ручного введення тексту в текстове поле, яке розповсюджується на рядок, прив'язаний до SelectedValue.

Зараз рядок, прив’язаний до SelectedValue, оновлюється лише в тому випадку, якщо введене значення є одним із значень у елементах ComboBox.

Як дозволити користувацькі значення, недоступні у списку ComboBox, вводити вручну та належним чином поширювати їх до прив’язаного значення?

Відповіді:


135

Я просто робив це вчора і сьогодні, і це виглядає так:

  1. встановити комбобокс IsEditable="true"

  2. замість того, щоб SelectedItemприв'язувати до, прив'язувати до Textвластивості списку сполучень

  3. якщо ви прив'язуєте користувацький об'єкт замість лише рядків, вам також потрібно встановити TextSearch.TextPath="NameOfField". Це дозволяє працювати поведінці пошуку тексту, а також відображає цю властивість у текстовому полі.

Загалом, у мене вийшло щось на зразок:

<ComboBox x:Name="c" 
          IsEditable="True" 
          IsTextSearchEnabled="True" 
          IsTextSearchCaseSensitive="False" 
          StaysOpenOnEdit="True"
          Text="{Binding NameOnViewModel}"
          TextSearch.TextPath="NameOnChildItems"  
          ItemsSource="{Binding Items}" 
          ItemTemplate="{StaticResource DataTemplate}" />

<TextBlock Text="{Binding ElementName=c,Path=Text}" />

4
о, і якщо ви не використовуєте ItemTemplate, ви можете використовувати DisplayMemberPath = "Name" замість DataTemplate.
Джон Гарднер,

28

Також буде достатньо встановити прив’язку до властивості Text у Combo.

<ComboBox  IsTextSearchEnabled="True"    IsEditable="True" 
ItemsSource="{Binding Items}" Text="{Binding SelectedItemText, Mode=TwoWay}" />

1
Відмінно працює для прив'язки до списку рядків.
Герман Кордес,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.