Browse Source

Make logic a bit clearer.

pull/9677/head
Steven Kirk 4 years ago
parent
commit
08f90dcad6
  1. 27
      src/Avalonia.Controls/VirtualizingStackPanel.cs

27
src/Avalonia.Controls/VirtualizingStackPanel.cs

@ -428,7 +428,8 @@ namespace Avalonia.Controls
private Control GetOrCreateElement(IList items, int index)
{
var e = GetRealizedElement(index) ??
var e = GetRealizedElement(index) ??
GetItemIsOwnContainer(items, index) ??
GetRecycledElement(items, index) ??
CreateElement(items, index);
InvalidateHack(e);
@ -442,15 +443,12 @@ namespace Avalonia.Controls
return _realizedElements?.GetElement(index);
}
private Control? GetRecycledElement(IList items, int index)
private Control? GetItemIsOwnContainer(IList items, int index)
{
Debug.Assert(ItemsControl is not null);
var generator = ItemsControl!.ItemContainerGenerator;
var item = items[index];
if (item is Control controlItem)
if (items[index] is Control controlItem)
{
var generator = ItemsControl!.ItemContainerGenerator;
if (controlItem.IsSet(ItemIsOwnContainerProperty))
{
controlItem.IsVisible = true;
@ -459,12 +457,23 @@ namespace Avalonia.Controls
else if (generator.IsItemItsOwnContainer(controlItem))
{
AddInternalChild(controlItem);
generator.PrepareItemContainer(controlItem, item, index);
generator.PrepareItemContainer(controlItem, controlItem, index);
controlItem.SetValue(ItemIsOwnContainerProperty, true);
return controlItem;
}
}
return null;
}
private Control? GetRecycledElement(IList items, int index)
{
Debug.Assert(ItemsControl is not null);
var generator = ItemsControl!.ItemContainerGenerator;
var item = items[index];
if (_recyclePool?.Count > 0)
{
var recycled = _recyclePool.Pop();

Loading…
Cancel
Save