-1

我的 WPF 应用程序中有一个ListBox。该ListBox's ItemsSource属性设置为我定义的对象集合。这些都是从UserControl.

我需要ListBox按照它们出现在屏幕上的顺序循环遍历这些项目。我相信我可以通过遍历ListBox's Items集合来做到这一点。

我相信这个集合中的对象是 type ListBoxItem。我如何从ListBoxItem? 换句话说,我如何获得UserControlListBoxItem?

编辑:

我应该首先包含的其他信息:

我需要Items按照它们出现的顺序循环,ListBox这样我就可以选择最接近顶部的匹配特定条件的那个。找到我感兴趣的那个之后,我需要选择它。这是一个单一的选择ListBox,所以一次只会选择一个项目。

所以,我的问题真的是:如何选择项目?

这并不重要,但我的类型下降的原因UserControl是因为它包含许多需要在ListBox每个项目中显示的控件。

4

3 回答 3

0

Items正是您设置它们或ItemsSourceto 的内容(通常应该是数据对象,而不是UserControls),因此您只需要将它们转换为您的类型。

这并不重要,但我的类型来自 UserControl 的原因是因为它包含许多需要在 ListBox 中为每个项目显示的控件。

不是一个好的理由。在 WPF 中,您应该使用数据项并使用数据绑定数据模板来使用相应的控件显示数据。

同样要选择给定的项目,数据项应该具有一个IsSelected属性,然后可以将其绑定ItemsControl.ItemContainerStyle到该ListBoxItem.IsSelected属性中。

如果您随后将项目设置为IsSelected,则也应选择true相应的项目(您需要在项目上实施)。ListBoxItemINotifyPropertyChanged

于 2012-10-02T18:44:26.033 回答
0

我发现我需要以Items相反的顺序遍历集合中的项目。我不知道为什么会这样,我认为该Items系列按照它们在屏幕上出现的顺序保存了所有内容。也许是因为 ListBox 在DateTime基础数据的属性上按降序排序?

无论如何,由于我必须向后循环,我最终不得不编写一个for从集合末尾开始并向前工作的循环。由于我现在有了要选择的项目的索引,因此很容易设置ListBox.SelectedIndex为该索引。

于 2012-10-03T17:08:48.717 回答
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 回答