public void ListBox_Should_Be_Valid_After_Remove_Of_Item_In_NonVisibleArea() { using (UnitTestApplication.Start(TestServices.StyledWindow)) { var items = new AvaloniaList <string>(Enumerable.Range(1, 30).Select(v => v.ToString())); var wnd = new Window() { Width = 100, Height = 100, IsVisible = true }; var target = new ListBox() { AutoScrollToSelectedItem = true, Height = 100, Width = 50, VirtualizationMode = ItemVirtualizationMode.Simple, ItemTemplate = new FuncDataTemplate <object>((c, _) => new Border() { Height = 10 }), Items = items, }; wnd.Content = target; var lm = wnd.LayoutManager; lm.ExecuteInitialLayoutPass(); //select last / scroll to last item target.SelectedItem = items.Last(); lm.ExecuteLayoutPass(); //remove the first item (in non realized area of the listbox) items.Remove("1"); lm.ExecuteLayoutPass(); Assert.Equal("30", target.ItemContainerGenerator.ContainerFromIndex(items.Count - 1).DataContext); Assert.Equal("29", target.ItemContainerGenerator.ContainerFromIndex(items.Count - 2).DataContext); Assert.Equal("28", target.ItemContainerGenerator.ContainerFromIndex(items.Count - 3).DataContext); Assert.Equal("27", target.ItemContainerGenerator.ContainerFromIndex(items.Count - 4).DataContext); Assert.Equal("26", target.ItemContainerGenerator.ContainerFromIndex(items.Count - 5).DataContext); } }