如何获取itemscontrol中项的索引

时间:2012-02-07 16:25:01

标签: xaml silverlight-4.0 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:我不希望用户交互后的索引,应该自动检索。

1 个答案:

答案 0 :(得分:0)

如果你想要一个itemscontrol中项目的索引 - 如果有某种选择,它对我来说才有意义。但是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();

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