如何检测ListView项目的重新排序

时间:2012-11-12 19:03:32

标签: c# xaml windows-runtime

我有一个绑定到ObservableCollection的ListView; 此列表视图中的项目可以重新排序。

但是,我不知道如何检测物品何时被重新排序。 我找不到任何相关的ListView事件。当拖动项目时,ObservableCollection的CollectionChanged事件会被触发两次('添加'和'删除'事件),所以我认为无法判断项目是否实际在UI中移动,或者我是否以编程方式添加了新项目。

有没有办法检测物品何时被重新排序?

提前致谢。

2 个答案:

答案 0 :(得分:0)

你应该改变你的拖放。检查ItemsControl.DataContext是否是一个ObservableCollection,如果是调用.Move而不是.Remove,然后是.Add。这样,您的底层集合将获得正确的事件,您可以简单地处理它。

你说你不能自己实施拖拽,这是可能的。下面是ListView上的一个示例,它实现了同一列表和其他列表之间的拖放。一个选项是从这里开始并修改它以调用。移动。它还具有能够绘制Adorners以使其看起来漂亮的优点。

How to drag and drop items between data bound ItemsControls

我知道您可能希望避免必须实现此功能,我认为您唯一的另一个选择是为您的Collection公开CollectionView,而不是依赖于创建的默认视图。我不确定这是否会让你检测到移动而不是添加/删除。

答案 1 :(得分:-1)

似乎有重新排序列表的事件:DragItemsStarting和Drop。但是,Drop事件目前仅适用于ObservableVector<object>

http://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/431cb3b4-0643-4a0e-8f1a-fc6e1e726ffb