可编辑的ComboBox绑定到不在列表中的值

92

我有一个可编辑的组合框,其中并不总是在下拉列表中找到首选项。

我希望能够手动输入文本到文本框中,并将其传播到与SelectedValue绑定的字符串。

现在,只有当输入的值是ComboBox项之一时,与SelectedValue绑定的字符串才会被更新。

如何允许输入ComboBox列表中没有的自定义值,并正确地传播到绑定值?

2个回答

150

我昨天和今天刚做过这个,看起来像下面这样:

  1. 将ComboBox的属性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}" />

5
哦,如果您没有使用ItemTemplate,您可以使用DisplayMemberPath="Name"而不是使用DataTemplate。 - John Gardner

35

将组合框的绑定设置为Text属性也足以满足要求。

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

1
完美地适用于绑定到字符串列表。 - Herman Cordes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接