如何在ItemsControl中获取项的索引

3
我想显示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)或其他方法都没有给我结果。

ItemsControl看起来像这样:

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

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

我很喜欢在XAML中这样做,因为我们在许多页面上重复使用该对象。

任何好的建议都将是很棒的。

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


这是一个类似的问题,可能会有所帮助,尽管它使用了一个列表框:http://stackoverflow.com/questions/4333807/how-to-get-listbox-selected-index - Marshal
@Marshal:获取索引不应该从交互中获取,我想要那个索引,这样我就可以枚举在itemscontrol中显示的项。 - Terry
1个回答

0

如果您想要在ItemsControl中获取某个项的索引,那么对我来说,只有在存在某种选择时才有意义。但是,ItemsControl没有选择器,因此也没有选择和选择更改事件。因此,如果您需要进行某些选择,请使用ListBox。

还有一件事

<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应该发生什么?没有选择。您想让您的项DataTemplate显示选择吗? - blindmeis
不,我在itemscontrol中有一个datatemplate,它显示与其绑定的对象的一些数据。一些额外的信息是列表中某个事物的编号。假设我有20个项目绑定到itemscontrol:我想显示每个项目的索引,并在textblock中显示它。 - Terry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接