我有可编辑的组合框,其中并不总是首选项位于下拉列表中。
我希望能够在文本框中手动输入文本,该文本传播到绑定到SelectedValue的字符串。
现在绑定到SelectedValue的字符串只有在ComboBox项目中输入的值打开时才会更新。
如何允许手动输入ComboBox列表中不可用的自定义值并将其正确传播到绑定值?
答案 0 :(得分:120)
我昨天和今天只是这样做,看起来如下:
设置组合框IsEditable="true"
而不是绑定到SelectedItem
,绑定到组合框的Text
属性
如果您要绑定自定义对象而不仅仅是字符串,则还需要设置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}" />
答案 1 :(得分:26)
将绑定设置为Combo的Text属性也足够了。
<ComboBox IsTextSearchEnabled="True" IsEditable="True"
ItemsSource="{Binding Items}" Text="{Binding SelectedItemText, Mode=TwoWay}" />