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;
            }
        }
Beispiel #2
0
        /// <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;
                }
            }
        }