我在WP8的LongListSelector中顯示圖像集合,並且我已經實現了使用LLS的ItemRealized事件的well known lazy loading pattern。在LayoutMode中使用LongListSelector進行延遲加載= Grid
在下面的代碼中,OnItemRealized函數會針對圖片集合中的每個項目調用 - 即使對於明顯不在屏幕中的項目。在這種情況下,24個項目適合屏幕,但LLS實現了40個項目,這觸發了ViewModel的ResumeGetPictures()。當圖片集合改變時(INotifyCollectionChanged),LLS也會實現這些項目,直到它用完了項目,觸發下一個ResumeGetPictures() - 這將一直持續到ViewModel無法加載更多項目。
只要LLS在LayoutMode = List中,所有似乎都沒問題。但是當我切換到網格時,控件似乎吞噬了列表中的每個項目並立即實現。無法進行任何類型的延遲加載。
我希望我只是做了一件非常非常錯誤的事情 - 雖然我懷疑是因爲我已經三重檢查了一切,就像我說的切換到「列表」,立即解決了問題 - 不幸的是沒有一個照片庫的選項分類。
視圖模型:
public IReactiveDerivedList<TPicture> Pictures
{
get { return pictures; }
}
查看代碼隱藏:
lls.ItemRealized += OnItemRealized;
private void OnItemRealized(object sender, ItemRealizationEventArgs e)
{
var picture = e.Container.Content as Picture;
if (picture != null)
{
// get index
var pictureIndex = lls.ItemsSource.IndexOf(picture);
if (pictureIndex >= lls.ItemsSource.Count * 0.95f)
ViewModel.ResumeGetPictures();
}
}
XAML:
<phone:LongListSelector Name="lls" Margin="13,-30,0,0"
ItemsSource="{Binding Pictures}"
Tap="OnListItemTapped"
ItemTemplate="{StaticResource ItemTemplate}"
IsGroupingEnabled="False"
LayoutMode="Grid"
GridCellSize="108,108"/>
這在很大程度上取決於你的網格項目的大小,和你的方式確定列表中的最後一個項目。你應該在這裏發佈你的代碼和XAML。 –
@ClausJørgensen已添加代碼。 –
嗯,首先,你的乘法不會有效,因爲'Count'是一個整數。你可能會乘以一個。至於你的問題,你是否在說,如果你刪除了它內部的所有邏輯,那麼OnItemRealized被調用了40次? –