我有一个绑定到ObservableCollection的ListView; 此列表视图中的项目可以重新排序。
但是,我不知道如何检测物品何时被重新排序。 我找不到任何相关的ListView事件。当拖动项目时,ObservableCollection的CollectionChanged事件会被触发两次('添加'和'删除'事件),所以我认为无法判断项目是否实际在UI中移动,或者我是否以编程方式添加了新项目。
有没有办法检测物品何时被重新排序?
提前致谢。
答案 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>