-1

私のWPFアプリケーションにはが含まListBoxれています。プロパティは、ListBox's ItemsSource私が定義したオブジェクトのコレクションに設定されています。これらはすべて。から派生しUserControlます。

ListBox画面に表示される順序でアイテムをループする必要があります。ListBox's Itemsコレクションをループすることでこれができると思います。

このコレクションのオブジェクトはタイプであると思いますListBoxItem。自分のタイプのオブジェクトを?から取得するにはどうすればよいListBoxItemですか?言い換えると、?UserControlから派生したクラスのインスタンスを取得するにはどうすればよいListBoxItemですか?

編集:

そもそも含めるべきだった追加情報:

特定の条件に一致する一番上に最も近いものを選択できるようにItems、表示される順序でループする必要があります。ListBox興味のあるものを見つけたら、それを選択する必要があります。これは単一の選択ListBoxであるため、一度に1つのアイテムのみが選択されます。

だから、私の質問は本当にです:どうすればアイテムを選択できますか?

それは重要ではありませんが、私のタイプが派生する理由は、各アイテムUserControlに表示する必要のある多数のコントロールが含まれているためです。ListBox

4

3 に答える 3

0

これらItemsは正確に設定したものまたはに設定したものであるItemsSourceため(通常はデータオブジェクトでUserControlsある必要があります)、タイプにキャストする必要があります。

それは重要ではありませんが、私のタイプがUserControlから派生している理由は、各アイテムのリストボックスに表示する必要のある多数のコントロールが含まれているためです。

それは正当な理由ではありません。WPFでは、データアイテムを使用し、データバインディングデータテンプレートを使用して、それぞれのコントロールでデータを表示する必要があります。

また、特定のアイテムを選択するには、データアイテムにプロパティが必要です。このプロパティは、プロパティIsSelectedにバインドできます。ItemsControl.ItemContainerStyleListBoxItem.IsSelected

次に、アイテムにを設定するIsSelectedtrue、それぞれListBoxItemも選択する必要があります(INotifyPropertyChangedアイテムに実装する必要があります)。

于 2012-10-02T18:44:26.033 に答える
0

条件に一致する最初のアイテムを単純に選択してみませんか。

Func<ItemType, bool> match =
    item =>
    {
        return ...; // a bool that indicates if the condition is matched
    };

listBox.SelectedItem = listBox.Items.Cast<ItemType>().FirstOrDefault(match);
于 2012-10-02T20:27:49.840 に答える
0

Itemsコレクション内のアイテムを逆の順序でループする必要があることがわかりました。理由はわかりませんが、Itemsコレクションには画面に表示されている順序ですべてが含まれていると思いました。DateTimeおそらく、リストボックスが基になるデータのプロパティで降順で並べ替えられているためですか?

いずれにせよ、私は逆方向にループしなければならなかったのでfor、コレクションの最後から始まり、順方向に進むループを書かなければならなくなりました。選択したいアイテムのインデックスができたので、ListBox.SelectedIndexそのインデックスに設定するのは簡単でした。

于 2012-10-03T17:08:48.717 に答える