ComboBox editable con enlace al valor que no está en la lista

81

Tengo un cuadro combinado editable donde no siempre el elemento preferido está en la lista desplegable.

Me gustaría tener la posibilidad de ingresar texto manualmente en el cuadro de texto que se propaga a la cadena vinculada a SelectedValue.

En este momento, la cadena vinculada a SelectedValue solo se actualiza si el valor ingresado es uno de los que están en los elementos ComboBox.

¿Cómo permito que los valores personalizados que no están disponibles en la lista ComboBox se ingresen manualmente y se propaguen correctamente al valor límite?

ronag
fuente

Respuestas:

135

Estaba haciendo esto ayer y hoy y se parece a lo siguiente:

  1. configurar el cuadro combinado IsEditable="true"

  2. en lugar de enlazar a SelectedItem, enlazar a la Textpropiedad del cuadro combinado

  3. si está vinculando a un objeto personalizado en lugar de solo cadenas, también debe establecer TextSearch.TextPath="NameOfField". Esto permite que funcione el comportamiento de búsqueda de texto y también muestra esta propiedad en el cuadro de texto.

Con todo, terminé con algo como:

<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}" />
John Gardner
fuente
4
oh, y si no está usando ItemTemplate, puede usar DisplayMemberPath = "Name" en lugar de usar un DataTemplate.
John Gardner
28

También será suficiente establecer el enlace a la propiedad Text de Combo.

<ComboBox  IsTextSearchEnabled="True"    IsEditable="True" 
ItemsSource="{Binding Items}" Text="{Binding SelectedItemText, Mode=TwoWay}" />
Rauld
fuente
1
Funciona perfectamente para buscar para enlazar a una lista de cadenas.
Herman Cordes