2010-09-18 77 views
64

我有可编辑的组合框,其中并不总是首选项在下拉列表中。可编辑ComboBox绑定到值不在列表中

我想有可能在传播到绑定到SelectedValue的字符串的文本框中手动输入文本。

现在,绑定到SelectedValue的字符串仅在输入的值位于ComboBox项目中的值上时更新。

如何允许手动输入ComboBox列表中不可用的自定义值并将其正确传播到绑定值?

回答

106

我只是在做这个,昨天和今天,它看起来像如下:

  1. 设置组合框IsEditable="true"

  2. 而是结合SelectedItem的,绑定到ComboBox

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

哦,如果你不使用ItemTemplate,你可以使用DisplayMemberPath =“Name”而不是使用DataTemplate。 – 2010-11-16 23:52:00

+1

太棒了!它也适用于数字 – Roberto 2012-08-20 13:59:43

24

设置绑定到文本组合的性能就足够了为好。

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

完美找到绑定到一个字符串列表。 – 2012-05-08 09:15:21