<ListView x:Name="myListView" ItemsSource="{x:Bind PageViewModel.myCollectionOfThings, Mode=OneWay}">
    <ListView.ItemTemplate>
        <DataTemplate x:DataType="viewmodels:ThingViewModel>
            <TextBlock Text="{x:Bind Name, Mode=OneWay}" />
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>
<Button Name="TestButton" Tapped="TestButton_Tapped"/>
private void TestButton_Tapped(object sender, TappedRoutedEventArgs e)
{
PageViewModel.myCollectionOfThings.Add(newItem);
myListView.SelectedIndex++;
}

Я пытаюсь создать карусельный контроль **. Используя приведенный выше код, я могу динамически добавлять элемент в конец коллекции каждый раз, когда увеличивается выбранный индекс. Это работает, как и следовало ожидать, за исключением одной проблемы. Несмотря на то, что пользовательский интерфейс отражает новые элементы, добавленные в конец ListView, если я переберу последний индекс последнего размера коллекции original , пользовательский интерфейс переместится обратно в начало списка и выберет index становится 0. Я пробовал много вариантов приведенного выше кода и пробовал разные типы коллекций. Я также пытался переназначать ItemSource ItemView каждую итерацию, которая ничего не делала. Любая помощь будет оценена.

** Я знаю, что в UWP Community Toolkit есть нечто, называемое Каруселью, но на самом деле это не карусель. Карусель может прокручиваться бесконечно, поскольку ее коллекция будет зацикливаться, чего не делает этот элемент управления.

1
Sean O'Neil 27 Май 2017 в 22:15

2 ответа

Лучший ответ

Если вы хотите использовать Карусель с бесконечной прокруткой, посмотрите на элемент Карусель в пакет Windows AppStudio NuGet. Загрузите примеры UWP для Windows App Studio узнать о контроле.

Вот изображение этого элемента управления Каруселью введите описание изображения здесь

1
Vijay Nirmal 28 Май 2017 в 05:00

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

int currentIndex = myListView.SelectedIndex;
PageViewModel.myCollectionOfThings.Add(newItem);
myListView.SelectedIndex = currentIndex++;
// If above doesn't work try setting selectedItem property to newItem.
0
vendettamit 27 Май 2017 в 20:11