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?

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}" />

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}" />

1
Funciona perfectamente para buscar para enlazar a una lista de cadenas.
Herman Cordes
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.