UIのListBoxにバインドされているObservableCollectionの個々のアイテムの変更に関する質問があります。
UIのユーザーは、アイテムを複数選択してから、特定のインデックスにドロップして並べ替えることができます。
したがって、アイテム{0,1,2,3,4,5,6,7,8,9}がある場合、ユーザーはアイテム2、5、7を(この順序で)選択し、インデックス3にドロップすることを選択できます。 、コレクションが次のようになるように、
{ 0,1,3、2、5、7、4、8,9 }
私が今それを機能させている方法は、私のコントロールのondrop()メソッドの中でこのようになっています、私は次のようなことをします:
foreach (Item item in draggedItems)
{
int oldIndex = collection.IndexOf(item.DataContext as MyItemType);
int newIndex = toDropIndex;
if (newIndex == collection.Count)
{
newIndex--;
}
if (oldIndex != newIndex)
{
collection.Move(oldIndex, newIndex);
}
}
しかし、問題は、最初のアイテムをドラッグし始めるインデックスの前にアイテムをドロップすると、順序が逆になることです...したがって、コレクションは次のようになります。
{ 0,1,3、7、5、2、4、8,9 }
インデックス3の後にドロップすると正常に動作しますが、3の前にドロップすると、順序が逆になります。
これで、簡単な削除を実行してから、必要なインデックスにすべてのアイテムを挿入できますが、「移動」には、UIでの選択を維持できるという利点があります(削除すると、基本的にリスト内のアイテムの選択が解除されます)。 ....だから私はmoveメソッドを利用する必要があります、
上記の私の方法の何が問題になっていますか、そしてそれを修正する方法は?ありがとう!