WPF IsEditable=true オブジェクトで満たされた ComboBox には、選択された項目として ToString() が表示されます

StackOverflow https://stackoverflow.com/questions/1844156

質問

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 リンクのコード例を参照してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top