| 
														
															@@ -1,6 +1,7 @@ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 // Copyright (c) The Avalonia Project. All rights reserved. 
														 | 
														
														 | 
														
															 // Copyright (c) The Avalonia Project. All rights reserved. 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 // Licensed under the MIT license. See licence.md file in the project root for full license information. 
														 | 
														
														 | 
														
															 // Licensed under the MIT license. See licence.md file in the project root for full license information. 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+using System.Collections; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 using System.Collections.Generic; 
														 | 
														
														 | 
														
															 using System.Collections.Generic; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 using System.Collections.ObjectModel; 
														 | 
														
														 | 
														
															 using System.Collections.ObjectModel; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 using System.Collections.Specialized; 
														 | 
														
														 | 
														
															 using System.Collections.Specialized; 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -14,6 +15,7 @@ using Avalonia.Data; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 using Avalonia.Input; 
														 | 
														
														 | 
														
															 using Avalonia.Input; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 using Avalonia.Interactivity; 
														 | 
														
														 | 
														
															 using Avalonia.Interactivity; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 using Avalonia.Markup.Data; 
														 | 
														
														 | 
														
															 using Avalonia.Markup.Data; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+using Avalonia.Styling; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 using Avalonia.UnitTests; 
														 | 
														
														 | 
														
															 using Avalonia.UnitTests; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 using Moq; 
														 | 
														
														 | 
														
															 using Moq; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 using Xunit; 
														 | 
														
														 | 
														
															 using Xunit; 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -980,6 +982,45 @@ namespace Avalonia.Controls.UnitTests.Primitives 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             Assert.True(raised); 
														 | 
														
														 | 
														
															             Assert.True(raised); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } 
														 | 
														
														 | 
														
															         } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        [Fact] 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        public void AutoScrollToSelectedItem_On_Reset_Works() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            // Issue #3148 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            using (UnitTestApplication.Start(TestServices.StyledWindow)) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                var items = new ResettingCollection(100); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                var target = new ListBox 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                    Items = items, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                    ItemTemplate = new FuncDataTemplate<string>((x, _) => 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                        new TextBlock 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                        { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                            Text = x, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                            Width = 100, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                            Height = 10 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                        }), 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                    AutoScrollToSelectedItem = true, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                    VirtualizationMode = ItemVirtualizationMode.Simple, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                }; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                var root = new TestRoot(true, target); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                root.Measure(new Size(100, 100)); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                root.Arrange(new Rect(0, 0, 100, 100)); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                Assert.True(target.Presenter.Panel.Children.Count > 0); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                Assert.True(target.Presenter.Panel.Children.Count < 100); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                target.SelectedItem = "Item99"; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                // #3148 triggered here. 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                items.Reset(new[] { "Item99" }); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                Assert.Equal(0, target.SelectedIndex); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                Assert.Equal(1, target.Presenter.Panel.Children.Count); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         [Fact] 
														 | 
														
														 | 
														
															         [Fact] 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         public void Can_Set_Both_SelectedItem_And_SelectedItems_During_Initialization() 
														 | 
														
														 | 
														
															         public void Can_Set_Both_SelectedItem_And_SelectedItems_During_Initialization() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         { 
														 | 
														
														 | 
														
															         { 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -1028,6 +1069,7 @@ namespace Avalonia.Controls.UnitTests.Primitives 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                     Name = "itemsPresenter", 
														 | 
														
														 | 
														
															                     Name = "itemsPresenter", 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                     [~ItemsPresenter.ItemsProperty] = control[~ItemsControl.ItemsProperty], 
														 | 
														
														 | 
														
															                     [~ItemsPresenter.ItemsProperty] = control[~ItemsControl.ItemsProperty], 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                     [~ItemsPresenter.ItemsPanelProperty] = control[~ItemsControl.ItemsPanelProperty], 
														 | 
														
														 | 
														
															                     [~ItemsPresenter.ItemsPanelProperty] = control[~ItemsControl.ItemsPanelProperty], 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                    [~ItemsPresenter.VirtualizationModeProperty] = control[~ListBox.VirtualizationModeProperty], 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 }.RegisterInNameScope(scope)); 
														 | 
														
														 | 
														
															                 }.RegisterInNameScope(scope)); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } 
														 | 
														
														 | 
														
															         } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -1072,5 +1114,24 @@ namespace Avalonia.Controls.UnitTests.Primitives 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 return base.MoveSelection(direction, wrap); 
														 | 
														
														 | 
														
															                 return base.MoveSelection(direction, wrap); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             } 
														 | 
														
														 | 
														
															             } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } 
														 | 
														
														 | 
														
															         } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        private class ResettingCollection : List<string>, INotifyCollectionChanged 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            public ResettingCollection(int itemCount) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                AddRange(Enumerable.Range(0, itemCount).Select(x => $"Item{x}")); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            public void Reset(IEnumerable<string> items) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                Clear(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                AddRange(items); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                CollectionChanged?.Invoke( 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                    this, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                    new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            public event NotifyCollectionChangedEventHandler CollectionChanged; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     } 
														 | 
														
														 | 
														
															     } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 } 
														 | 
														
														 | 
														
															 } 
														 |