<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++;
}
我正在尝试创建旋转木马控件**。使用上面的代码,每次选择的索引增加时,我都可以动态地将项添加到集合的末尾。除了一个问题之外,它可以像预期的那样工作即使UI反映了添加到ListView末尾的新项目,如果我迭代超过原始集合大小的最后一个索引,UI会跳回到列表的开头并且选中索引变为0.我尝试了上述代码的许多变体,并尝试了不同的集合类型。我也尝试过每次迭代重新分配ListView的ItemSource,它没有做任何事情。任何帮助将不胜感激。
**我知道在UWP社区工具包中有一些名为Carousel但它实际上并不是旋转木马。旋转木马可以循环滚动,因为它的集合将循环播放,而控件不会循环播放。
答案 0 :(得分:1)
如果您想要无限滚动的Carousel,请查看Carousel中的Windows AppStudio NuGet package控件。下载Windows App Studio UWP Samples以了解控件。
的图像答案 1 :(得分:0)
当更改集合时,listview看起来像是使用绑定源重新绑定。尝试在添加项目后手动重新设置索引。
int currentIndex = myListView.SelectedIndex;
PageViewModel.myCollectionOfThings.Add(newItem);
myListView.SelectedIndex = currentIndex++;
// If above doesn't work try setting selectedItem property to newItem.