Browse Source

Merge pull request #4304 from AvaloniaUI/revert-4294-fixes/4293-listbox-remove-item-selection

Revert "Fix selection after deleting an item."
pull/4314/head
Steven Kirk 6 years ago
committed by GitHub
parent
commit
5004606400
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 8
      samples/ControlCatalog/Pages/ListBoxPage.xaml
  2. 11
      src/Avalonia.Controls/ItemsControl.cs
  3. 3
      tests/Avalonia.Controls.UnitTests/CarouselTests.cs
  4. 4
      tests/Avalonia.Controls.UnitTests/ItemsControlTests.cs
  5. 44
      tests/Avalonia.Controls.UnitTests/Primitives/SelectingItemsControlTests.cs
  6. 4
      tests/Avalonia.Controls.UnitTests/Primitives/SelectingItemsControlTests_Multiple.cs

8
samples/ControlCatalog/Pages/ListBoxPage.xaml

@ -10,13 +10,7 @@
HorizontalAlignment="Center" HorizontalAlignment="Center"
Spacing="16"> Spacing="16">
<StackPanel Orientation="Vertical" Spacing="8"> <StackPanel Orientation="Vertical" Spacing="8">
<ListBox Items="{Binding Items}" <ListBox Items="{Binding Items}" SelectedItem="{Binding SelectedItem}" AutoScrollToSelectedItem="True" SelectionMode="{Binding SelectionMode}" Width="250" Height="350"></ListBox>
SelectedItem="{Binding SelectedItem}"
SelectedItems="{Binding SelectedItems}"
AutoScrollToSelectedItem="True"
SelectionMode="{Binding SelectionMode}"
Width="250"
Height="350"/>
<Button Command="{Binding AddItemCommand}">Add</Button> <Button Command="{Binding AddItemCommand}">Add</Button>

11
src/Avalonia.Controls/ItemsControl.cs

@ -70,6 +70,7 @@ namespace Avalonia.Controls
public ItemsControl() public ItemsControl()
{ {
PseudoClasses.Add(":empty"); PseudoClasses.Add(":empty");
SubscribeToItems(_items);
} }
/// <summary> /// <summary>
@ -264,11 +265,6 @@ namespace Avalonia.Controls
{ {
} }
protected override void OnInitialized()
{
SubscribeToItems(_items);
}
/// <summary> /// <summary>
/// Handles directional navigation within the <see cref="ItemsControl"/>. /// Handles directional navigation within the <see cref="ItemsControl"/>.
/// </summary> /// </summary>
@ -334,10 +330,7 @@ namespace Avalonia.Controls
Presenter.Items = newValue; Presenter.Items = newValue;
} }
if (IsInitialized) SubscribeToItems(newValue);
{
SubscribeToItems(newValue);
}
} }
/// <summary> /// <summary>

3
tests/Avalonia.Controls.UnitTests/CarouselTests.cs

@ -4,7 +4,6 @@ using Avalonia.Controls.Presenters;
using Avalonia.Controls.Primitives; using Avalonia.Controls.Primitives;
using Avalonia.Controls.Templates; using Avalonia.Controls.Templates;
using Avalonia.LogicalTree; using Avalonia.LogicalTree;
using Avalonia.UnitTests;
using Avalonia.VisualTree; using Avalonia.VisualTree;
using Xunit; using Xunit;
@ -156,7 +155,6 @@ namespace Avalonia.Controls.UnitTests
IsVirtualized = false IsVirtualized = false
}; };
var root = new TestRoot(target);
target.ApplyTemplate(); target.ApplyTemplate();
target.Presenter.ApplyTemplate(); target.Presenter.ApplyTemplate();
@ -249,7 +247,6 @@ namespace Avalonia.Controls.UnitTests
IsVirtualized = false IsVirtualized = false
}; };
var root = new TestRoot(target);
target.ApplyTemplate(); target.ApplyTemplate();
target.Presenter.ApplyTemplate(); target.Presenter.ApplyTemplate();

4
tests/Avalonia.Controls.UnitTests/ItemsControlTests.cs

@ -131,7 +131,6 @@ namespace Avalonia.Controls.UnitTests
var child = new Control(); var child = new Control();
var items = new AvaloniaList<Control>(child); var items = new AvaloniaList<Control>(child);
var root = new TestRoot(target);
target.Template = GetTemplate(); target.Template = GetTemplate();
target.Items = items; target.Items = items;
items.RemoveAt(0); items.RemoveAt(0);
@ -284,7 +283,6 @@ namespace Avalonia.Controls.UnitTests
var items = new AvaloniaList<string> { "Foo" }; var items = new AvaloniaList<string> { "Foo" };
var called = false; var called = false;
var root = new TestRoot(target);
target.Template = GetTemplate(); target.Template = GetTemplate();
target.Items = items; target.Items = items;
target.ApplyTemplate(); target.ApplyTemplate();
@ -305,7 +303,6 @@ namespace Avalonia.Controls.UnitTests
var items = new AvaloniaList<string> { "Foo", "Bar" }; var items = new AvaloniaList<string> { "Foo", "Bar" };
var called = false; var called = false;
var root = new TestRoot(target);
target.Template = GetTemplate(); target.Template = GetTemplate();
target.Items = items; target.Items = items;
target.ApplyTemplate(); target.ApplyTemplate();
@ -379,7 +376,6 @@ namespace Avalonia.Controls.UnitTests
Items = new[] { 1, 2, 3 }, Items = new[] { 1, 2, 3 },
}; };
var root = new TestRoot(target);
Assert.DoesNotContain(":empty", target.Classes); Assert.DoesNotContain(":empty", target.Classes);
} }

44
tests/Avalonia.Controls.UnitTests/Primitives/SelectingItemsControlTests.cs

@ -170,8 +170,6 @@ namespace Avalonia.Controls.UnitTests.Primitives
SelectionMode = SelectionMode.Single | SelectionMode.AlwaysSelected SelectionMode = SelectionMode.Single | SelectionMode.AlwaysSelected
}; };
var root = new TestRoot(listBox);
listBox.BeginInit(); listBox.BeginInit();
listBox.SelectedIndex = 1; listBox.SelectedIndex = 1;
@ -482,7 +480,6 @@ namespace Avalonia.Controls.UnitTests.Primitives
Template = Template(), Template = Template(),
}; };
var root = new TestRoot(target);
target.ApplyTemplate(); target.ApplyTemplate();
target.Presenter.ApplyTemplate(); target.Presenter.ApplyTemplate();
items.Add(new Item { IsSelected = true }); items.Add(new Item { IsSelected = true });
@ -534,7 +531,6 @@ namespace Avalonia.Controls.UnitTests.Primitives
}; };
target.ApplyTemplate(); target.ApplyTemplate();
target.Presenter.ApplyTemplate();
target.SelectedIndex = 1; target.SelectedIndex = 1;
Assert.Equal(items[1], target.SelectedItem); Assert.Equal(items[1], target.SelectedItem);
@ -553,45 +549,6 @@ namespace Avalonia.Controls.UnitTests.Primitives
Assert.NotNull(receivedArgs); Assert.NotNull(receivedArgs);
Assert.Empty(receivedArgs.AddedItems); Assert.Empty(receivedArgs.AddedItems);
Assert.Equal(new[] { removed }, receivedArgs.RemovedItems); Assert.Equal(new[] { removed }, receivedArgs.RemovedItems);
Assert.False(items.Single().IsSelected);
}
[Fact]
public void Removing_Selected_Item_Should_Clear_Selection_With_BeginInit()
{
var items = new AvaloniaList<Item>
{
new Item(),
new Item(),
};
var target = new SelectingItemsControl();
target.BeginInit();
target.Items = items;
target.Template = Template();
target.EndInit();
target.ApplyTemplate();
target.Presenter.ApplyTemplate();
target.SelectedIndex = 0;
Assert.Equal(items[0], target.SelectedItem);
Assert.Equal(0, target.SelectedIndex);
SelectionChangedEventArgs receivedArgs = null;
target.SelectionChanged += (_, args) => receivedArgs = args;
var removed = items[0];
items.RemoveAt(0);
Assert.Null(target.SelectedItem);
Assert.Equal(-1, target.SelectedIndex);
Assert.NotNull(receivedArgs);
Assert.Empty(receivedArgs.AddedItems);
Assert.Equal(new[] { removed }, receivedArgs.RemovedItems);
Assert.False(items.Single().IsSelected);
} }
[Fact] [Fact]
@ -922,7 +879,6 @@ namespace Avalonia.Controls.UnitTests.Primitives
Items = items, Items = items,
}; };
var root = new TestRoot(target);
target.ApplyTemplate(); target.ApplyTemplate();
target.Presenter.ApplyTemplate(); target.Presenter.ApplyTemplate();

4
tests/Avalonia.Controls.UnitTests/Primitives/SelectingItemsControlTests_Multiple.cs

@ -1014,7 +1014,6 @@ namespace Avalonia.Controls.UnitTests.Primitives
SelectionMode = SelectionMode.Multiple, SelectionMode = SelectionMode.Multiple,
}; };
var root = new TestRoot(target);
target.ApplyTemplate(); target.ApplyTemplate();
target.Presenter.ApplyTemplate(); target.Presenter.ApplyTemplate();
@ -1044,7 +1043,6 @@ namespace Avalonia.Controls.UnitTests.Primitives
SelectionMode = SelectionMode.Multiple, SelectionMode = SelectionMode.Multiple,
}; };
var root = new TestRoot(target);
target.ApplyTemplate(); target.ApplyTemplate();
target.Presenter.ApplyTemplate(); target.Presenter.ApplyTemplate();
@ -1078,7 +1076,6 @@ namespace Avalonia.Controls.UnitTests.Primitives
SelectionMode = SelectionMode.Multiple, SelectionMode = SelectionMode.Multiple,
}; };
var root = new TestRoot(target);
target.ApplyTemplate(); target.ApplyTemplate();
target.Presenter.ApplyTemplate(); target.Presenter.ApplyTemplate();
@ -1202,7 +1199,6 @@ namespace Avalonia.Controls.UnitTests.Primitives
Template = Template(), Template = Template(),
}; };
var root = new TestRoot(target);
target.ApplyTemplate(); target.ApplyTemplate();
target.Presenter.ApplyTemplate(); target.Presenter.ApplyTemplate();
items.Add(new ItemContainer { IsSelected = true }); items.Add(new ItemContainer { IsSelected = true });

Loading…
Cancel
Save