2017-03-03 84 views
0

我有一個填充了大量項目的網格視圖...每個項目都有一個圖像。而當用戶向下滾動時,有些項目會因虛擬化而無法實現。而且,當用戶滾動顯示它們時,這些項目開始更新數據,圖像源。問題是更新圖像源會阻止用戶界面,並且在加載圖像之前,網格中的項目不會顯示。這看起來不錯,而且非常不連貫滾動...c#uwp虛擬化問題

這裏是什麼例如虛擬化的GridView做:

我的問題是,如何設置項目的數量,虛擬化將實現?

+0

虛擬化由'GridView'控制這是不開放源,以便處理我們不知道它是如何完成的。你可以嘗試使用'GridView'的'ItemsPanel'進行播放,默認爲['ItemsWrapGrid'](https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.controls .itemswrapgrid),看看有沒有什麼可以幫助你。不過,還有另一種方式可以在圖像加載時實現平滑滾動。你可以使用['x:Phase'](https://docs.microsoft.com/en-us/windows/uwp/xaml-platform/x-phase-attribute) – Corcus

回答

0

使用虛擬化面板的CacheLength屬性。

<ListView> 
    <ListView.ItemsPanel> 
     <ItemsPanelTemplate> 
      <ItemsStackPanel CacheLength="0" /> 
     </ItemsPanelTemplate> 
    </ListView.ItemsPanel> 
</ListView> 

如果緩存長度是視圖端口大小的倍數。因此,如果在窗口中可見3個項目並且緩存長度爲1,則(3 + 3 + 3 = 9)之後,您將有3個實現項目,並且3個實現項目。如果高速緩存長度爲2,則6 + 6 + 3 = 15,等

這適用於GridView以及:

<GridView> 
    <GridView.ItemsPanel> 
     <ItemsPanelTemplate> 
      <ItemsWrapGrid CacheLength="0" /> 
     </ItemsPanelTemplate> 
    </GridView.ItemsPanel> 
</GridView>