public Size Measure(Size availableSize) { int startIdx, endIdx; // Figure out range that's visible based on layout algorithm getVisibleRange(availableSize, out startIdx, out endIdx); //Add and subtract CacheItemCount to StartIdx and EndIdx. _panel.UpdateCacheItemCount(ref startIdx, ref endIdx); //Generate new items and cleaup unused items. _panel.Generator.Generate(startIdx, endIdx); _panel.Generator.CleanUp(startIdx, endIdx); //Output extent so it can be accessed by PanelScrollHelper. Extent = calculateExtent(availableSize, _panel.getItemCount()); //And return availableSize (take all available). return(availableSize); }
/// <summary> /// Add and subtract CacheItemCount to StartIdx and EndIdx. /// </summary> /// <param name="panel"></param> /// <param name="startIdx"></param> /// <param name="endIdx"></param> public static void UpdateCacheItemCount(this IOCPanel panel, ref int startIdx, ref int endIdx) { //Add and subtract CacheItemCount to StartIdx and EndIdx. int itemCount = panel.getItemCount(); startIdx -= panel.CacheItemCount; endIdx += panel.CacheItemCount; if (startIdx < 0) { startIdx = 0; } if (endIdx > itemCount - 1) { endIdx = itemCount - 1; } }