When reorder is enabled via IsItemsReorderEnabled ListView calls CollectionChanged event for underlying ObservableCollection.
But in some cases it reports wrong new index and though visually item order is as expected underlying ObservableCollection gets wrong order.
To reproduce the issue bind just 2 strings to the ListView, say Item1 and Item2.
Drag first string (Item1) under second (Item2), ListView will look like this:
But ObservableCollection still has this:
If you subscribe to CollectionChanged event you will see that reported new item index is wrong, it should be 1 but in fact it is 0, as if the item was moved from 0 to 0.
Now start over, then drag second item (Item2) on top of first item (Item1), ListView will look like this:
And ObservableCollection properly updated to:
It looks like when an item is moved down its index is less by 1 than it should be.