获取 ListBoxItem 的索引 - WPF

Posted

技术标签:

【中文标题】获取 ListBoxItem 的索引 - WPF【英文标题】:Get index of ListBoxItem - WPF 【发布时间】:2011-08-08 15:13:00 【问题描述】:

如何获取ListBoxItem 的索引?

ListBox 已通过 XmlDataProvider 绑定到 XML 节点集合。

【问题讨论】:

【参考方案1】:

我有一个类似的问题,得到了here的回答

基本上,您将 ListBox 的 AlternationCount 设置为非常高的值,并绑定到每个项目上的 AlternationIndex

<ListBox AlternationCount="100">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="Binding RelativeSource=RelativeSource Mode=TemplatedParent,
                                      Path=(ItemsControl.AlternationIndex)" />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

【讨论】:

@Greg:同意,但这是迄今为止我发现使用 ListBox 做到这一点的唯一方法。我希望他们在未来的 WPF 版本中添加一个属性 @punker76 我认为 ListBoxes 默认是虚拟化的,所以不应该这样 @Rachel 好的,虚拟化是默认设置,但交替索引不起作用。我创建了一个小项目,尝试向下和向上滚动,您将看到 jkarger.de/Wpf***SpielWiese.exe (.net 4)【参考方案2】:

可以从ItemContainerGenerator获取ListBoxItem的索引:

listBox.ItemContainerGenerator.IndexFromContainer(listBoxItem);

【讨论】:

【参考方案3】:

属性SelectedIndex 可以工作。这完全取决于您如何进行绑定

您可能希望将 SelectedIndex 依赖属性绑定到连接到它的数据上下文的对象的某些属性,例如

<ListBox SelectedIndex="Binding MySelectedIndex" ItemsSource="Binding MyItems"/>

但你显然可以这样做

<ListBox SelectedIndex="Binding MySelectedIndex">
  <ListBoxItem>1</ListBoxItem>
  <ListBoxItem>2</ListBoxItem>
  <ListBoxItem>3</ListBoxItem>
  <ListBoxItem>4</ListBoxItem>
</ListBox>

【讨论】:

以上是关于获取 ListBoxItem 的索引 - WPF的主要内容,如果未能解决你的问题,请参考以下文章

根据 ListBox 中的索引设置 ListBoxItem 的样式

获取ListBox中的ListBoxItem

如何从选定的 ListBox Control 的 listboxitem 中获取属性? C#

如何仅使用其数据绑定类从 ListBoxItem 访问按钮/标签?

一个加载时带动画效果的ListBoxItem

Firemonkey ListBoxItem自绘