.NET Core Version: 5.0.100-rc.1.20420.14
Have you experienced this same bug with .NET Framework?: Yes, tested in net472, netcoreapp3.1
Repro steps:
Actual:
ListViewItem is not displayed in ListView because ListItemView.ListView = null. I think ListView should be set for item when we add group with this item to ListView.
As a result ListViewItem.AccesibleObject may either throw InvalidOperationException, when attempting to access an item which added to a group, but have not link to the listview (2), or have a stable/incorrect reference to the listview when its group is removed from the listview (3)
Expected:
ListViewItem is displayed in ListView, if added to a group which is then added to a listview.ListViewItem has a reference to the listview, when a group is added to the listviewListViewItem has a reference to the listview removed, when a group is removed from the listviewNotes:
```
var group = new ListViewGroup("Test group");
// this item is not shown in the listview, and doens't have reference to listview
// i.e. item1.ListView = null
ListViewItem item1 = new ListViewItem("You don't see me");
group.Items.Add(item1);
listView2.Groups.Add(group);
// this items is shown in the listview, item2.ListView <-- listView2
ListViewItem item2 = new ListViewItem("You see me", group);
listView2.Items.Add(item2);
```
The issue 3439 maybe be part of it.
Self contained test:
[WinFormsFact]
public void ListViewGroupCollection_Add_ListViewGroupWithItems_Success()
{
var item = new ListViewItem();
var group = new ListViewGroup();
group.Items.Add(new ListViewItem());
group.Items.Add(item);
using var control = new ListView();
ListViewGroupCollection collection = control.Groups;
Assert.Equal(0, collection.Add(group));
Assert.Same(group, Assert.Single(collection));
Assert.Same(control, group.ListView);
Assert.Same(control, item.ListView);
Assert.Same(group, item.Group);
Assert.Equal(new ListViewItem[] { item }, control.Items.Cast<ListViewItem>());
Assert.False(control.IsHandleCreated);
}
Failures:
item.ListView is nullAssert.Same(control, item.ListView);
control.Items is emptyAssert.Equal(new ListViewItem[] { item }, control.Items.Cast<ListViewItem>());
@hughbe assigning to you since you've started on it.