Browse Source

Handle item insertion in CarouselPresenter.

Fixes #2432.
pull/2489/head
Steven Kirk 7 years ago
parent
commit
76c3d0c03d
  1. 25
      src/Avalonia.Controls/Presenters/CarouselPresenter.cs

25
src/Avalonia.Controls/Presenters/CarouselPresenter.cs

@ -38,7 +38,6 @@ namespace Avalonia.Controls.Presenters
Carousel.PageTransitionProperty.AddOwner<CarouselPresenter>();
private int _selectedIndex = -1;
// private Task _current;
private Task _currentTransition;
private int _queuedTransitionIndex = -1;
@ -105,12 +104,33 @@ namespace Avalonia.Controls.Presenters
/// <inheritdoc/>
protected override void ItemsChanged(NotifyCollectionChangedEventArgs e)
{
var generator = ItemContainerGenerator;
switch (e.Action)
{
case NotifyCollectionChangedAction.Add:
var end = e.NewStartingIndex + e.NewItems.Count;
if (end < Items.Count())
{
generator.InsertSpace(e.NewStartingIndex, e.NewItems.Count);
}
if (SelectedIndex >= e.NewStartingIndex && SelectedIndex < end)
{
var newItem = GetOrCreateContainer(SelectedIndex);
foreach (var control in Panel.Children)
{
control.IsVisible = control == newItem;
}
}
break;
case NotifyCollectionChangedAction.Remove:
if (!IsVirtualized)
{
var generator = ItemContainerGenerator;
var containers = generator.RemoveRange(e.OldStartingIndex, e.OldItems.Count);
Panel.Children.RemoveAll(containers.Select(x => x.ContainerControl));
@ -122,7 +142,6 @@ namespace Avalonia.Controls.Presenters
case NotifyCollectionChangedAction.Reset:
{
var generator = ItemContainerGenerator;
var containers = generator.Containers.ToList();
generator.Clear();
Panel.Children.RemoveAll(containers.Select(x => x.ContainerControl));

Loading…
Cancel
Save