2010-09-18 10 views
64

Tengo un cuadro combinado editable donde no siempre el elemento preferido está en la lista desplegable.ComboBox editable con enlace al valor no en la lista

Me gustaría tener la posibilidad de ingresar manualmente texto 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 está activado en los elementos de ComboBox.

¿Cómo puedo permitir que los valores personalizados no disponibles en la lista de ComboBox se ingresen manualmente y se propaguen correctamente al valor encuadernado?

Respuesta

106

Estaba haciendo esto ayer y hoy y parece que el siguiente:

  1. establecer el cuadro combinado IsEditable="true"

  2. en lugar de unirse a SelectedItem, se unen a la propiedad Text 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 el comportamiento de búsqueda de texto funcione 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}" /> 
+2

oh, y si no está utilizando ItemTemplate, puede usar DisplayMemberPath = "Nombre" en lugar de utilizar una plantilla de datos. –

+1

¡genial! Funciona también para los números – Roberto

24

Ajuste de la unión de texto de la propiedad de Combo será suficiente también.

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

Funciona perfectamente para vincular a una lista de cadenas. –

Cuestiones relacionadas