private void CleanUpMemory(int cleanRange) { int currentIndex = PreviewItems.IndexOf(SelectedPreview); int previewItemsCount = PreviewItems.Count - 1; switch (GalleryDirection) { case GalleryDirection.Next: if ((currentIndex - cleanRange) >= 0) { int cleanIndex = currentIndex - cleanRange; if (PreviewItems[cleanIndex].IsBusy) { PreviewItems[cleanIndex].CancelPreviewRequest(); } PreviewItems[cleanIndex].InViewingRange = false; PreviewItems[cleanIndex].PreviewImageUri = null; } break; case GalleryDirection.Previous: if ((currentIndex + cleanRange) <= previewItemsCount) { int cleanIndex = currentIndex + cleanRange; if (PreviewItems[cleanIndex].IsBusy) { PreviewItems[cleanIndex].CancelPreviewRequest(); } PreviewItems[cleanIndex].InViewingRange = false; PreviewItems[cleanIndex].PreviewImageUri = null; } break; } }
/// <summary> /// Set the range of previews to load before and after the current preview. /// </summary> /// <param name="viewRange">Range from the current item to load the previews.</param> /// <param name="initialize">Indicates if is an initialization.</param> /// <exception cref="ArgumentOutOfRangeException"/> private void SetViewingRange(int viewRange, bool initialize) { if (SelectedPreview == null) { return; } int currentIndex = PreviewItems.IndexOf(SelectedPreview); int lowIndex = currentIndex - viewRange; if (lowIndex < 0) { lowIndex = 0; } int highIndex = currentIndex + viewRange; if (highIndex > PreviewItems.Count - 1) { highIndex = PreviewItems.Count - 1; } if (initialize) { for (int i = currentIndex; i >= lowIndex; i--) { PreviewItems[i].InViewingRange = true; } for (int i = currentIndex; i <= highIndex; i++) { PreviewItems[i].InViewingRange = true; } } else { switch (GalleryDirection) { case GalleryDirection.Next: default: PreviewItems[highIndex].InViewingRange = true; break; case GalleryDirection.Previous: PreviewItems[lowIndex].InViewingRange = true; break; } } }