2012-02-07 1 views
3

Я хочу, чтобы показать текущий индекс элемента в 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

+0

@ Маршал: получение индекса shouldn ' t получить от взаимодействия, я хочу, чтобы индекс, чтобы я мог перечислять элементы, которые я показываю в itemscontrol – Terry

ответ

0

, если вы хотите, чтобы индекс элемента находился под контролем элементов - это просто имеет смысл для меня, если есть какой-то выбор. но itemscontrol не имеет селектора, поэтому нет выбора и поэтому нет события с измененным выбором. так что если вы хотите, чтобы некоторые ОТБОР ListBox

еще одну вещь

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

режим = TwoWay не имеет смысла, вызывать ваш itemsscontrol никогда не установит, подчеркивающий источник.

EDIT: Я просто предполагаю, что вы хотите от вашего комментария. вы можете использовать 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

пропустил ваш коммит. что должно произойти в вашем контроле товаров? нет выбора. вы хотите, чтобы ваш элемент datatemplate показывал выбор? – blindmeis

+0

Нет, в itemcontrol у меня есть datatemplate, который показывает некоторые данные от связанного с ним объекта. дополнительная информация - это то, что номер в списке. Скажем, у меня есть 20 элементов, связанных с элементами управления items: я хочу показать, что индекс относится к каждому элементу и показать его в текстовом блоке. – Terry