20

Wpf コンボ ボックスでは編集が可能です。これは、すべてのコンボ ボックス項目が文字列であるか、それらに ToString() メソッドが定義されている場合に問題ありません。

アイテムを選択すると、テキストとして表示され、DataTemplate を使用せず、選択されたアイテムで ToString() を呼び出すだけです。

項目テンプレートを使用して書式設定されたコンボ ドロップダウンの項目のリストを取得します。1 つを選択すると、オブジェクトの名前、つまりMyNamespace.MyObjectNameが取得されます。

いくつかの解決策が

  • ValuePath を使用してオブジェクトのプロパティにバインドしますが、表示をこれらの複数にする必要がある場合は不運です。
  • オブジェクトに ToString() メソッドを実装する

別の方法はありますか?

4

2 に答える 2

36

これは完全に 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 メソッド以外の何かにバインドできます。

于 2010-02-18T15:50:17.397 に答える
3

IValueConverterを使用して、「オブジェクト」を文字列値に変換し、元に戻すことができます。詳細については、IValueConverter リンクのサンプル コードを参照してください。

于 2009-12-04T00:55:27.360 に答える