Browse Source

Merge pull request #1913 from WojciechKrysiak/bugfix/CorrectedSelectedItemsControlEvent

Fix SelectedItemsChanged event arguments in SelectingItemsControl
Jumar Macato 7 years ago
parent
commit
71c2019086

+ 2 - 2
src/Avalonia.Controls/Primitives/SelectingItemsControl.cs

@@ -871,8 +871,8 @@ namespace Avalonia.Controls.Primitives
                         RaisePropertyChanged(SelectedItemProperty, oldItem, item, BindingPriority.LocalValue);
                         RaisePropertyChanged(SelectedItemProperty, oldItem, item, BindingPriority.LocalValue);
                     }
                     }
 
 
-                    added = e.OldItems;
-                    removed = e.NewItems;
+                    added = e.NewItems;
+                    removed = e.OldItems;
                     break;
                     break;
             }
             }
 
 

+ 29 - 0
tests/Avalonia.Controls.UnitTests/Primitives/SelectingItemsControlTests_Multiple.cs

@@ -541,6 +541,35 @@ namespace Avalonia.Controls.UnitTests.Primitives
             Assert.True(called);
             Assert.True(called);
         }
         }
 
 
+        [Fact]
+        public void Replacing_SelectedItems_Should_Raise_SelectionChanged_With_CorrectItems()
+        {
+            var items = new[] { "foo", "bar", "baz" };
+
+            var target = new TestSelector
+            {
+                Items = items,
+                Template = Template(),
+                SelectedItem = "bar",
+            };
+
+            var called = false;
+
+            target.SelectionChanged += (s, e) =>
+            {
+                Assert.Equal(new[] { "foo",}, e.AddedItems.Cast<object>());
+                Assert.Equal(new[] { "bar" }, e.RemovedItems.Cast<object>());
+                called = true;
+            };
+
+            target.ApplyTemplate();
+            target.Presenter.ApplyTemplate();
+            target.SelectedItems[0] = "foo";
+
+            Assert.True(called);
+        }
+
+
         private FuncControlTemplate Template()
         private FuncControlTemplate Template()
         {
         {
             return new FuncControlTemplate<SelectingItemsControl>(control =>
             return new FuncControlTemplate<SelectingItemsControl>(control =>