csharpc-sharpdotnetxamlavaloniauicross-platformcross-platform-xamlavaloniaguimulti-platformuser-interfacedotnetcore
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
1.5 KiB
42 lines
1.5 KiB
using System.Collections;
|
|
using System.Collections.Generic;
|
|
|
|
namespace Avalonia.Layout
|
|
{
|
|
public class VirtualLayoutContextAdapter : NonVirtualizingLayoutContext
|
|
{
|
|
private readonly VirtualizingLayoutContext _virtualizingContext;
|
|
private ChildrenCollection _children;
|
|
|
|
public VirtualLayoutContextAdapter(VirtualizingLayoutContext virtualizingContext)
|
|
{
|
|
_virtualizingContext = virtualizingContext;
|
|
}
|
|
|
|
protected override object LayoutStateCore
|
|
{
|
|
get => _virtualizingContext.LayoutState;
|
|
set => _virtualizingContext.LayoutState = value;
|
|
}
|
|
|
|
protected override IReadOnlyList<ILayoutable> ChildrenCore =>
|
|
_children ?? (_children = new ChildrenCollection(_virtualizingContext));
|
|
|
|
private class ChildrenCollection : IReadOnlyList<ILayoutable>
|
|
{
|
|
private readonly VirtualizingLayoutContext _context;
|
|
public ChildrenCollection(VirtualizingLayoutContext context) => _context = context;
|
|
public ILayoutable this[int index] => _context.GetOrCreateElementAt(index);
|
|
public int Count => _context.ItemCount;
|
|
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
|
|
|
|
public IEnumerator<ILayoutable> GetEnumerator()
|
|
{
|
|
for (var i = 0; i < Count; ++i)
|
|
{
|
|
yield return this[i];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|