1. ホーム
  2. .net

[解決済み] 編集可能なコンボボックスとリストにない値へのバインディング

2023-05-17 09:49:25

質問

編集可能なコンボボックスがありますが、必ずしも希望する項目がドロップダウンリストに表示されるとは限りません。

テキストボックスに手動でテキストを入力し、それがSelectedValueにバインドされている文字列に伝搬されるようにしたいです。

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

コンボボックスのリストで利用できないカスタム値を手動で入力し、バインドされた値に適切に伝搬させるにはどうすればよいですか?

どのように解決するのですか?

昨日今日とやっていたら、以下のようになりました。

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