リストにない値にバインドされた編集可能なComboBox


81

常に優先アイテムがドロップダウンリストにあるとは限らない編集可能なコンボボックスがあります。

SelectedValueにバインドされた文字列に伝播されるテキストボックスにテキストを手動で入力できるようにしたいと思います。

現在、SelectedValueにバインドされた文字列は、入力された値がComboBoxアイテムの値の1つである場合にのみ更新されます。

ComboBoxリストで使用できないカスタム値を手動で入力し、バインドされた値に適切に伝播できるようにするにはどうすればよいですか?

回答:


135

私は昨日と今日これをやっていたところ、次のようになります。

  1. コンボボックスを設定する IsEditable="true"

  2. にバインドする代わりに、コンボボックスのプロパティにSelectedItemバインドし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}" />

4
ああ、ItemTemplateを使用していない場合は、DataTemplateを使用する代わりにDisplayMemberPath = "Name"を使用できます。
ジョンガードナー

28

ComboのTextプロパティへのバインディングを設定することも十分です。

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

1
文字列のリストにバインドするために完全に検索します。
ハーマンコーデス2012年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.