【问题标题】:How to get the index of an item in an itemscontrol如何获取项目控件中项目的索引
【发布时间】:2012-02-07 16:25:00
【问题描述】:

我想在 itemscontrol 中显示项目的当前索引:

<TextBlock Foreground="#ffffffff"  Margin="8,8,2,2" TextWrapping="Wrap" Text="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=Items.CurrentIndex}" Grid.Column="0" Grid.Row="0" HorizontalAlignment="Right"/>

这是我最好的猜测。我遇到了许多可能的解决方案,但使用 alternationcount(silverlight 似乎不支持)或其他方法并没有给我结果。

items 控件如下所示:

<ItemsControl Grid.Column="0" Grid.ColumnSpan="3" HorizontalAlignment="Stretch" Grid.Row="6" ItemsSource="{Binding Alternatives, Mode=TwoWay}" ></ItemsControl>

绑定到 itemscontrol 的列表是一个带有一些属性的简单对象。

我真的很喜欢在 XAML 中执行此操作,因为我们在很多页面上重复使用该对象。

任何好的建议都会很棒。

PS:我不希望用户交互后的索引,它应该自动检索。

【问题讨论】:

  • stackoverflow.com/questions/4333807/… 这是一个类似的问题,虽然它使用列表框,但它可能会有所帮助
  • @Marshal : 获取索引不应该从交互中获取,我想要那个索引,这样我就可以枚举我在 itemscontrol 中显示的项目

标签: xaml silverlight-4.0 itemscontrol


【解决方案1】:

如果您想要项目控件中的项目索引 - 如果有某种选择,这对我来说才有意义。但是 itemsscontrol 没有选择器,因此没有选择,因此没有 selectionchanged 事件。因此,如果您想要一些选择,请使用列表框

还有一件事

<ItemsControl ItemsSource="{Binding Alternatives, Mode=TwoWay}" ></ItemsControl>

mode=twoway 没有意义,因为您的 itemsscontrol 永远不会设置下划线源。

编辑:我只是假设你想从你的评论中得到什么。您可以使用 ICollectionView 来遍历您的项目。但是你的 Itemscontrol 当然不能显示这个。但您可以更改项目本身以显示迭代

 ICollectionView view = CollectionViewsource.GetDefaultView(Alternatives);
 view.CurrentChanged += (s,a) => 
 {
    var current = this.view.CurrentItem;
    //to stuff with your current item here 
 };

你想迭代的其他地方

 view.MoveCurrentToNext();

你应该处理第一个和最后一个项目以及那些东西。

【讨论】:

  • 错过了您的评论。您的项目控制中应该发生什么?没有选择。你想让你的项目数据模板显示选择吗?
  • 不,在 itemscontrol 我有一个数据模板,它显示了绑定到它的对象的一些数据。一些额外的信息是列表中的数字。假设我有 20 个项目绑定到 itemscontrol:我想显示每个项目的索引是什么并将其显示在文本块中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-25
  • 2011-01-28
相关资源
最近更新 更多