Instead of directly setting indexes try using Insert and Remove methods like this:
int idx = Items.IndexOf(i);
Items.RemoveAt(idx) // or just Items.Remove(i);
Items.Insert(idx,i);
I believe windows may have some problems with reordering, but inserting and removing should call native methods. Didn't try myself, so please reply if it worked.