Как получить индекс элемента в элементе управления - PullRequest
3 голосов
/ 07 февраля 2012

Я хочу показать текущий индекс элемента в элементе управления:

<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"/>

Это моя лучшая догадка. Я сталкивался со многими возможными решениями, но работа с альтернативным счетом (не поддерживается в silverlight, как кажется) или другим не дала мне результата.

Элемент управления выглядит так:

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

Список, связанный с itemscontrol, является простым объектом с некоторыми свойствами.

Мне действительно нравится делать это в XAML, так как мы повторно используем этот объект на многих страницах.

Любые хорошие предложения будут великолепны.

PS: мне не нужен индекс после взаимодействия с пользователем, он должен быть получен автоматически.

1 Ответ

0 голосов
/ 08 февраля 2012

, если вы хотите, чтобы индекс элемента был в элементе управления - это просто имеет смысл для меня, если есть какой-то выбор. но у itemsscontrol нет селектора и, следовательно, нет выбора, и, следовательно, нет события выборки. так что если вы хотите какой-то выбор, возьмите список

еще одна вещь

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

mode = twoway не имеет смысла, потому что ваш элемент управления никогда не установит подчеркивающий источник.

РЕДАКТИРОВАТЬ: я просто предполагаю, что вы хотите от вашего комментария. Вы можете использовать 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();

вы должны обращаться с первым и последним предметом и тому подобным.

...