diff --git a/osu.Framework/Graphics/UserInterface/Dropdown.cs b/osu.Framework/Graphics/UserInterface/Dropdown.cs index 6b7313fbc3..515e3fbb46 100644 --- a/osu.Framework/Graphics/UserInterface/Dropdown.cs +++ b/osu.Framework/Graphics/UserInterface/Dropdown.cs @@ -84,6 +84,7 @@ public IBindableList ItemSource private void setItems(IEnumerable value) { clearItems(); + if (value == null) return; @@ -347,8 +348,7 @@ private void ensureItemSelectionIsValid() return; } - if (SelectedItem == null || !EqualityComparer.Default.Equals(Current.Value, selectedItem.Value)) - updateItemSelection(Current.Value); + updateItemSelection(Current.Value); } private void updateItemSelection(T value) @@ -382,7 +382,6 @@ private void clearItems() { itemMap.Clear(); Menu.Clear(); - selectedItem = null; } /// @@ -450,8 +449,9 @@ public void SelectItem(DropdownMenuItem item) { Children.OfType().ForEach(c => { + bool wasSelected = c.IsSelected; c.IsSelected = compareItemEquality(item, c.Item); - if (c.IsSelected) + if (c.IsSelected && !wasSelected) ContentContainer.ScrollIntoView(c); }); } @@ -483,8 +483,9 @@ protected void PreselectItem(MenuItem item) { Children.OfType().ForEach(c => { + bool wasPreSelected = c.IsPreSelected; c.IsPreSelected = compareItemEquality(item, c.Item); - if (c.IsPreSelected) + if (c.IsPreSelected && !wasPreSelected) ContentContainer.ScrollIntoView(c); }); }