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--;
}
}