質問

ASP.NET では、次を使用して DropDownList から項目を取得できることはわかっています。

DropDownList1.Items.FindByText

WPF で ComboBox に使用できる同様の方法はありますか?

これがシナリオです。

RestrictionType という列を含む RestrictionFormat というテーブルがあります。このタイプは、これらの値を格納するテーブルの外部キーです。

私が作成しているエディター アプリケーションでは、ユーザーが ComboBox から RestrictionFormat を選択すると (これは正常に動作します)、編集用の詳細を取得します。編集時にユーザーが 1 つの RestrictionType のみを選択できるようにするために、2 番目の ComboBox を使用しています。RestrictionType テーブルの 2 番目のコンボボックス バインド プロパティはすでにありますが、レコードで指定された値と一致するように、選択されたインデックスを変更する必要があります。


これがシナリオです。

RestrictionType という列を含む RestrictionFormat というテーブルがあります。このタイプは、これらの値を格納するテーブルの外部キーです。

私が作成しているエディター アプリケーションでは、ユーザーが ComboBox から RestrictionFormat を選択すると (これは正常に動作します)、編集用の詳細を取得します。編集時にユーザーが 1 つの RestrictionType のみを選択できるようにするために、2 番目の ComboBox を使用しています。RestrictionType テーブルの 2 番目のコンボボックス バインド プロパティはすでにありますが、レコードで指定された値と一致するように、選択されたインデックスを変更する必要があります。

これには意味がありますか?

役に立ちましたか?

解決

ItemContainerGeneratorは使えますか?

ItemContainerGenerator には、オブジェクト パラメーターを取る ContainerFromItem メソッドが含まれています。comboBox に含まれる完全なオブジェクトへの参照 (またはそれを再構築する方法) がある場合は、次のものを使用できます。

ComboBoxItem item = 
    (ComboBoxItem)myComboBox.ItemContainerGenerator.ContainerFromItem(myObject);

他のヒント

WPFではFindNameメソッドを使用できます。

XAML:

    <ComboBox Name="combo">
        <ComboBoxItem Name="item1" >1</ComboBoxItem>
        <ComboBoxItem Name="item2">2</ComboBoxItem>
        <ComboBoxItem Name="item3">3</ComboBoxItem>
    </ComboBox>

コードビハインドファイル

   item1.Content = "New content"; // Reference combo box item by name
   ComboBoxItem item = (ComboBoxItem)this.combo.FindName("item1"); // Using FindName method

コンテンツでアイテムを検索するには、次を使用できます UIの自動化.

SelectedIndex をバインドする代わりに、ComboBox 内の SelectedItem をレコード内の値にバインドしてみてはいかがでしょうか。

つまり、ComboBox (またはその親) の DataContext を選択した「レコード」に設定し、ComboBox の SelectedItem を「レコード」の公開プロパティにバインドします。

応答がより具体的で、ソース レコードと入力した ComboBox の両方で使用している変数と型を参照できるように、いくつかのコード スニペットや追加の詳細を提供していただければ役立つ場合があります。

コンボボックス項目は 2 つの方法で取得できます。

項目別:

ComboBoxItem item = (ComboBoxItem) control.ItemContainerGenerator.ContainerFromItem(control.SelectedItem);

インデックス別:

ComboBoxItem item = (ComboBoxItem) control.ItemContainerGenerator.ContainerFromIndex(1);

正確に何をしようとしているのかについて、いくつかの背景を教えていただけますか?

どのオブジェクトをコンボボックスに入れ、どのメソッドを使用しますか?(ItemsSourceプロパティを設定または拘束していますか?)なぜ「テキスト」でアイテムを検索する必要があるのですか?WPF での最も一般的な使用法は、SelectedItem プロパティを他のものにバインドして、表現を使用して選択されたエントリを取得/設定できるようにすることです。リスト内の特定の項目を見つける必要がある特定の要件はありますか?

最悪の場合、Linq To Objects を使用して ComboBox をバインドしているコレクションに対して検索を実行できます。

ComboBoxItem (つまり、ItemsSource をバインドするときに WPF によってバックグラウンドで生成される要素) を、バインド先のコレクション内の実際のオブジェクトである SelectedItem と混同しないでください。通常、これが WPF に慣れていない場合のほとんどの問題の原因です。実際の ComboBoxItem を見つける必要があるケースはほとんどありません。

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