如何获得一个项目的索引,一个ItemsControl

问题描述:

我要显示一个项目的当前指数在一个ItemsControl:如何获得一个项目的索引,一个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:我不希望用户交互后的索引,它应该自动检索。

+0

http://stackoverflow.com/questions/4333807/how-to-get-listbox-selected-index这是一个类似的问题,虽然它使用列表框 – Marshal 2012-02-08 08:02:40

+0

@Marshal:获取索引shouldn'从互动中获得,我想索引,所以我可以枚举项目控件 – Terry 2012-02-08 08:24:09

如果你想要项目控件中项目的索引 - 如果有某种选择对我来说只是有意义的。但itemsscontrol没有选择器,所以没有选择,所以没有选择更改事件。所以如果你想要一些选择采取列表框

一件事

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

模式=双向是没有意义的,导致你的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(); 

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

+0

中显示的项目错过了你的提交。你的itemscontrol应该发生什么?没有选择。你想让你的物品数据表显示选择? – blindmeis 2012-02-08 10:12:53

+0

不,在itemscontrol中我有一个datatemplate,它显示绑定到它的对象的一些数据。一些额外的信息是列表中的某个数字。假设我有20个项目绑定到itemscontrol:我想显示每个项目的索引,并将其显示在文本块中。 – Terry 2012-02-13 07:37:32