2017-05-27 48 views
1
<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"/> 

無法以編程方式導航動態的ListView

private void TestButton_Tapped(object sender, TappedRoutedEventArgs e) 
{ 
PageViewModel.myCollectionOfThings.Add(newItem); 
myListView.SelectedIndex++; 
} 

我試圖創建一個旋轉木馬控制**。使用上面的代碼,我可以在每次選定索引增加時動態地將項目添加到集合的末尾。除了一個問題之外,它可以像預期的那樣工作即使用戶界面反映了添加到ListView末尾的新項目,但如果我遍歷最後一個索引集合大小的最後一個索引,UI將跳回到列表的開始處,並且所選索引將變爲0. I已經嘗試了許多上述代碼的變體,並嘗試了不同的集合類型。我也試着重新分配ListView的ItemSource,每次迭代都沒有做任何事情。任何幫助,將不勝感激。

**我知道在UWP社區工具包中有一個叫做Carousel的東西,但它實際上並不是一個輪播。一個旋轉木馬可以循環滾動,因爲它的集合會循環,而這個控制不會。

+0

一些線索。當我到達原始集合大小的索引時,它跳回到開始處並變爲SelectedIndex 0.我使用VisualTreeHelper方法來監視ListView中的子項。看來每次我添加一個項目時,孩子數量都不會增加。只有在這個「重置爲0」發生之後,那麼小孩的數量纔會反映正確的項目數量。因此,即使集合計數正在改變,並且myListView.Items.Count()正在更改,但直到ListView被設置爲索引值(儘管它超出範圍)後,子計數纔會更新。 –

+1

我創建了一個示例項目。它按預期工作。你能提供整個班級嗎?以便我可以嘗試解決您的問題或使用Windows AppStudio Carousel控件。 –

+0

您是否使用帶有INotifyPropertyChanged或ObservableCollection的List作爲ItemSource? –

回答

0

它看起來像列表視圖綁定源重新綁定集合時更改。嘗試添加項目後手動重新設置索引。

int currentIndex = myListView.SelectedIndex; 
PageViewModel.myCollectionOfThings.Add(newItem); 
myListView.SelectedIndex = currentIndex++; 
// If above doesn't work try setting selectedItem property to newItem. 
+0

謝謝,但那不是。 –

+0

只是爲了澄清我曾嘗試這些建議,它是有道理的,這將是問題,但事實並非如此。 –