I am not sure how efficient this would be in your use case, but you might create a derived ItemsControl and override the GetContainerForItemOverride
and ClearContainerForItemOverride
methods to put and take item containers from a cache collection.
public class CachingItemsControl : ItemsControl
{
private readonly Stack<DependencyObject> itemContainers =
new Stack<DependencyObject>();
protected override DependencyObject GetContainerForItemOverride()
{
return itemContainers.Count > 0
? itemContainers.Pop()
: base.GetContainerForItemOverride();
}
protected override void ClearContainerForItemOverride(
DependencyObject element, object item)
{
itemContainers.Push(element);
}
}