Редактируемый ComboBox с привязкой к значению не в списке

У меня есть редактируемый combobox, где не всегда предпочтительный элемент находится в раскрывающемся списке.

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

В настоящее время строка, привязанная к SelectedValue, обновляется только в том случае, если введенное значение включено в элементы ComboBox.

Как разрешить ввод пользовательских значений, не доступных в списке ComboBox, и правильно их распространить на связанное значение?

Ответ 1

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

  • установите поле со списком IsEditable="true"

  • вместо привязки к SelectedItem, привязывается к свойству Text в поле со списком

  • если вы привязываетесь к настраиваемому объекту, а не только к строкам, вам также нужно установить 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}" />

Ответ 2

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

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