2012-10-15 62 views
3

我在Windows 8樣式應用程序中創建了一個搜索頁面。我已經實現了ISupportIncrementalLoading,並且當用戶滾動分頁時效果很好。清除ISupportIncrementalLoading

我遇到的問題是用戶進行第二次搜索時。我顯然不知道如何讓LoadMoreItemsAsync再次觸發。我試過以下內容:

1)清除Observable的底層集合並支持ISupportIncrementalLoading。這將清除屏幕上的所有項目,因此我知道它是正確綁定的。

2)完全替換實現ISupportIncrementalLoading的底層集合實例,並引發INotifyPropertyChanged,以便視圖知道屬性已更改。這也清除了屏幕上的所有項目。

但是,LoadMoreItemsAsync不希望在清除或替換底層集合實例後觸發。我的直覺是,用戶界面不認爲它需要再加載,但因爲我已經清除了所有應該加載的項目。

我已驗證HasMoreItems屬性設置爲true。

如果可以幫忙,遺憾的是,如果您從Windows 8商店下載FlixPicks,則可以看到生產中的錯誤。複製的步驟是:使用Windows

  1. 搜索搜索合同
  2. 通知尋呼作品從搜索頁面再次
  3. 搜索。
  4. 注意清除所有項目。 (此時LoadMoreItemsAsync未觸發)

感謝您提供任何建議!

+0

我剛剛創建了一個似乎很好地工作的repro。這很簡單,所以可能有些東西在那裏丟失。你能看一看,看看有什麼不同嗎? https://www.box.com/s/ddr8138khigwe6n78i4b –

+0

沙哈爾您好,感謝這麼多的樣品。你的樣品工作得很好。我已經調整了一下,這樣它就不再工作了。我使用GridView而不是列表視圖,並調整了每個項目的寬度。如果你會這麼友善,你可以看看調整後的代碼庫。爲了複製,你不必滾動,你必須一路向左,然後按開關或清除。如果你向右滾動它的工作。 https://www.box.com/s/9oe4miksi4yeyhat6rwo再次感謝! – Thomas

+0

已解決 - 請參閱答案。 –

回答

1

這絕對看起來像一個錯誤。爲了解決這個問題,添加以下行重置您的收藏(在任何情況下)後:

gv.LoadMoreItemsAsync(); 

您可以從控制可能繼承並創建一些覆蓋,將自動執行此操作:

+0

謝謝。從技術上講,這可以工作,但使用ViewModel時會造成混亂,因爲我沒有直接訪問綁定到集合的兩個控件。我現在已經黑了。我將一個Action傳遞給ViewModel,ViewModel在視圖模型中調用,然後Action可以訪問這些控件。我還必須處理另一個問題。在某些情況下,我得到了一個異常。看起來像時間問題。現在,我只需等待1秒鐘,如果還沒有結果,那麼我會強制調用LoadMoreItemsAsync。我在其周圍添加了重試邏輯,只需要1秒就不夠了。啊。 – Thomas

+0

其中一個「我需要淋浴」的修復程序。將其固定在控制中可能會更好。如果我有時間並將其放在我的博客/這裏,我會研究它。 –

0

我知道這是一個老問題,但我也遇到過,並認爲其他人可以從MVVM方法中獲益解決它。我的修復是在重置集合之後,將單個項目加載到集合中。

private async Task ResetCollectionAsync() 
{ 
    Clear(); 
    await LoadMoreItemsAsync(1); 
} 

收集被清空並且單個項目被重新添加。所述GridView/ListView控制檢測CollectionChanged事件和重新查詢HasMoreItems,以確定是否加載附加數據。

此行爲烘焙成IncrementalLoadingCollection(V1.0.1),同時也支持過濾和排序功能的開箱。