Browse Source

Removed the ElementFactory args stuff.

We're just using `IDataTemplate` so it's not needed.
pull/2603/head
Steven Kirk 7 years ago
parent
commit
e09b1e4bea
  1. 11
      src/Avalonia.Controls/Repeaters/ElementFactoryGetArgs.cs
  2. 12
      src/Avalonia.Controls/Repeaters/ElementFactoryRecycleArgs.cs
  3. 11
      src/Avalonia.Controls/Repeaters/ItemTemplateWrapper.cs
  4. 35
      src/Avalonia.Controls/Repeaters/ViewManager.cs

11
src/Avalonia.Controls/Repeaters/ElementFactoryGetArgs.cs

@ -1,11 +0,0 @@
using System;
namespace Avalonia.Controls.Repeaters
{
public sealed class ElementFactoryGetArgs : EventArgs
{
public object Data { get; set; }
public IControl Parent { get; set; }
internal int Index { get; set; }
}
}

12
src/Avalonia.Controls/Repeaters/ElementFactoryRecycleArgs.cs

@ -1,12 +0,0 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Avalonia.Controls.Repeaters
{
public sealed class ElementFactoryRecycleArgs : EventArgs
{
public IControl Element { get; set; }
public IControl Parent { get; set; }
}
}

11
src/Avalonia.Controls/Repeaters/ItemTemplateWrapper.cs

@ -11,7 +11,7 @@ namespace Avalonia.Controls.Repeaters
public ItemTemplateWrapper(IDataTemplate dataTemplate) => _dataTemplate = dataTemplate;
public IControl GetElement(ElementFactoryGetArgs args)
public IControl GetElement(IControl parent, object data)
{
var selectedTemplate = _dataTemplate;
var recyclePool = RecyclePool.GetPoolInstance(selectedTemplate);
@ -20,13 +20,13 @@ namespace Avalonia.Controls.Repeaters
if (recyclePool != null)
{
// try to get an element from the recycle pool.
element = recyclePool.TryGetElement(string.Empty, args.Parent);
element = recyclePool.TryGetElement(string.Empty, parent);
}
if (element == null)
{
// no element was found in recycle pool, create a new element
element = selectedTemplate.Build(args.Data);
element = selectedTemplate.Build(data);
// Associate template with element
element.SetValue(RecyclePool.OriginTemplateProperty, selectedTemplate);
@ -35,9 +35,8 @@ namespace Avalonia.Controls.Repeaters
return element;
}
public void RecycleElement(ElementFactoryRecycleArgs args)
public void RecycleElement(IControl parent, IControl element)
{
var element = args.Element;
var selectedTemplate = _dataTemplate;
var recyclePool = RecyclePool.GetPoolInstance(selectedTemplate);
if (recyclePool == null)
@ -47,7 +46,7 @@ namespace Avalonia.Controls.Repeaters
RecyclePool.SetPoolInstance(selectedTemplate, recyclePool);
}
recyclePool.PutElement(args.Element, "" /* key */, args.Parent);
recyclePool.PutElement(element, "" /* key */, parent);
}
}
}

35
src/Avalonia.Controls/Repeaters/ViewManager.cs

@ -18,8 +18,6 @@ namespace Avalonia.Controls.Repeaters
private readonly UniqueIdElementPool _resetPool;
private IControl _lastFocusedElement;
private bool _isDataSourceStableResetPending;
private ElementFactoryGetArgs _elementFactoryGetArgs;
private ElementFactoryRecycleArgs _elementFactoryRecycleArgs;
private int _firstRealizedElementIndexHeldByLayout = FirstRealizedElementIndexDefault;
private int _lastRealizedElementIndexHeldByLayout = LastRealizedElementIndexDefault;
private bool _eventsSubscribed;
@ -107,21 +105,7 @@ namespace Avalonia.Controls.Repeaters
var virtInfo = ItemsRepeater.GetVirtualizationInfo(element);
var clearedIndex = virtInfo.Index;
_owner.OnElementClearing(element);
if (_elementFactoryRecycleArgs == null)
{
// Create one.
_elementFactoryRecycleArgs = new ElementFactoryRecycleArgs();
}
var context = _elementFactoryRecycleArgs;
context.Element = element;
context.Parent = _owner;
_owner.ItemTemplateShim.RecycleElement(context);
context.Element = null;
context.Parent = null;
_owner.ItemTemplateShim.RecycleElement(_owner, element);
virtInfo.MoveOwnershipToElementFactory();
//_phaser.StopPhasing(element, virtInfo);
@ -579,22 +563,7 @@ namespace Avalonia.Controls.Repeaters
}
var data = _owner.ItemsSourceView.GetAt(index);
if (_elementFactoryGetArgs == null)
{
// Create one.
_elementFactoryGetArgs = new ElementFactoryGetArgs();
}
var args = _elementFactoryGetArgs;
args.Data = data;
args.Parent = _owner;
args.Index= index;
var element = itemTemplateFactory.GetElement(args);
args.Data = null;
args.Parent = null;
var element = itemTemplateFactory.GetElement(_owner, data);
var virtInfo = ItemsRepeater.TryGetVirtualizationInfo(element);
if (virtInfo == null)

Loading…
Cancel
Save