System.Windows.Controls.VirtualizingStackPanel.RemoveUnusedContainers C# (CSharp) Method

RemoveUnusedContainers() private method

private RemoveUnusedContainers ( int first, int count ) : void
first int
count int
return void
		void RemoveUnusedContainers (int first, int count)
		{
			IRecyclingItemContainerGenerator generator = ItemContainerGenerator as IRecyclingItemContainerGenerator;
			ItemsControl owner = ItemsControl.GetItemsOwner (this);
			VirtualizationMode mode = GetVirtualizationMode (this);
			CleanUpVirtualizedItemEventArgs args;
			int last = first + count - 1;
			GeneratorPosition pos;
			int item;
			
			//Console.WriteLine ("VSP.RemoveUnusedContainers ({0}, {1});", first, count);
			pos = new GeneratorPosition (Children.Count - 1, 0);
			while (pos.Index >= 0) {
				item = generator.IndexFromGeneratorPosition (pos);
				
				if (item < first || item > last) {
					//Console.WriteLine ("\tRemoving item[{0}] (child #{1})", item, pos.Index);
					args = new CleanUpVirtualizedItemEventArgs (Children[pos.Index], owner.Items[item]);
					OnCleanUpVirtualizedItem (args);
					
					if (!args.Cancel) {
						RemoveInternalChildRange (pos.Index, 1);
						
						if (mode == VirtualizationMode.Recycling)
							generator.Recycle (pos, 1);
						else
							generator.Remove (pos, 1);
					}
				}
				
				pos.Index--;
			}
		}