0

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

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

有什么方法可以检测物品何时被重新排序?

提前致谢。

4

2 回答 2

0

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

你说你不能自己实现拖动,这是可能的。这是一个 ListView 上的示例,它实现了相同列表和其他列表之间的拖放。一种选择是从这里开始并将其修改为调用 .Move 。它还具有能够绘制装饰器以使其看起来漂亮的优点。

如何在数据绑定的 ItemsControls 之间拖放项目

我了解您可能希望避免实现这一点,我认为您唯一的其他选择是为您的 Collection 公开 CollectionView 而不是依赖于创建的默认视图。我不确定这是否可以让您检测运动而不是添加/删除。

于 2012-11-13T08:55:04.593 回答
-1

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

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

于 2012-11-14T21:23:47.413 回答