WPF IsEditable=true オブジェクトで満たされた ComboBox には、選択された項目として ToString() が表示されます
質問
Wpf コンボ ボックスでは編集が可能で、すべてのコンボ ボックス項目が文字列であるか、それらに ToString() メソッドが定義されている場合は問題ありません。
項目を選択すると、その項目はテキストとして表示されます。DataTemplate は使用されず、選択された項目に対して ToString() が呼び出されるだけです。
項目テンプレートを使用して書式設定されたコンボ ドロップダウンで項目のリストを取得します。項目を選択すると、オブジェクトの名前が取得されます。 MyNamespace.MyObjectName
いくつかの解決策が提案されています
- ValuePathを使用してオブジェクト上のプロパティにバインドしますが、ディスプレイを複数のものにする必要がある場合は、不運です。
- オブジェクトにtoString()メソッドを実装します
別の方法はありますか?
解決
これは完全に Xaml 内で行うことができます
<ComboBox IsTextSearchEnabled="True" IsEditable="True"
ItemsSource="{Binding MyObjectCollection}"
TextSearch.TextPath="MyObjectName">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding MyObjectName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
利点は、分離コードを使用せずに、XAML 内でこれを自由に定義および変更できることです。ItemsSource をオブジェクトのコレクションにバインドし、検索の基準となるパスを TextSearch.TextPath に設定します。次に、カスタム ItemTemplate 内で、TextBlock をオブジェクトの ToString メソッドの外部にあるものにバインドできます。
他のヒント
使用できます IValueConverter 「オブジェクト」を文字列値に変換し、逆に変換します。詳細については、IValueConverter リンクのコード例を参照してください。
所属していません StackOverflow