我有一个绑定到 ObservableCollection 的 ListView;此列表视图中的项目可以重新排序。
但是,我不知道如何检测项目何时重新排序。我找不到任何相关的 ListView 事件。ObservableCollection 的 CollectionChanged 事件在拖动项目时会触发两次(“添加”和“删除”事件),因此我认为无法判断项目是否实际在 UI 中移动,或者我是否以编程方式添加了新物品。
有什么方法可以检测物品何时被重新排序?
提前致谢。
我有一个绑定到 ObservableCollection 的 ListView;此列表视图中的项目可以重新排序。
但是,我不知道如何检测项目何时重新排序。我找不到任何相关的 ListView 事件。ObservableCollection 的 CollectionChanged 事件在拖动项目时会触发两次(“添加”和“删除”事件),因此我认为无法判断项目是否实际在 UI 中移动,或者我是否以编程方式添加了新物品。
有什么方法可以检测物品何时被重新排序?
提前致谢。
你应该改变你的拖放。检查您的 ItemsControl.DataContext 是否是 ObservableCollection 以及是否调用 .Move 而不是 .Remove 然后 .Add。这样,您的基础集合将获得正确的事件,并且您可以简单地处理它。
你说你不能自己实现拖动,这是可能的。这是一个 ListView 上的示例,它实现了相同列表和其他列表之间的拖放。一种选择是从这里开始并将其修改为调用 .Move 。它还具有能够绘制装饰器以使其看起来漂亮的优点。
我了解您可能希望避免实现这一点,我认为您唯一的其他选择是为您的 Collection 公开 CollectionView 而不是依赖于创建的默认视图。我不确定这是否可以让您检测运动而不是添加/删除。
似乎有用于重新排序列表的事件:DragItemsStarting 和 Drop。但是,Drop 事件目前仅适用于ObservableVector<object>