ListBox实现拖拽排序功能
1、拖拽需要实现的事件包括:
PreviewMouseLeftButtonDown
LBoxSort_OnDrop
具体实现如下:
private void LBoxSort_OnPreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e){var pos = e.GetPosition(LBoxSort);HitTestResult result = VisualTreeHelper.HitTest(LBoxSort, pos);if (result == null){return;}var listBoxItem = Utils.FindVisualParent<ListBoxItem>(result.VisualHit);if (listBoxItem == null || listBoxItem.Content != LBoxSort.SelectedItem){return;}DataObject dataObj = new DataObject(listBoxItem.Content as Person);DragDrop.DoDragDrop(LBoxSort, dataObj, DragDropEffects.Move);}private void LBoxSort_OnDrop(object sender, DragEventArgs e){var pos = e.GetPosition(LBoxSort);var result = VisualTreeHelper.HitTest(LBoxSort, pos);if (result == null){return;}//查找元数据var sourcePerson = e.Data.GetData(typeof (Person)) as Person;if (sourcePerson == null){return;}//查找目标数据var listBoxItem = Utils.FindVisualParent<ListBoxItem>(result.VisualHit);if (listBoxItem == null){return;}var targetPerson = listBoxItem.Content as Person;if (ReferenceEquals(targetPerson, sourcePerson)){return;}_persons.Remove(sourcePerson);_persons.Insert(_persons.IndexOf(targetPerson), sourcePerson);}}
事件实现
2、排序功能实现:
数据源:
private ObservableCollection<Person> _persons = new ObservableCollection<Person>();private void InitData(){_persons.Add(new Person{Name = "test1", Order = "1"});_persons.Add(new Person { Name = "test2", Order = "2" });_persons.Add(new Person { Name = "test3", Order = "3" });_persons.Add(new Person { Name = "test4", Order = "4" });_persons.Add(new Person { Name = "test5", Order = "5" });}
数据源
3、排序功能实现:
为数据集合实现CollectionChanged事件,当数据集合发生变化时执行:
private void PersonsOnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e){if (e.Action == NotifyCollectionChangedAction.Remove){for (int i = e.OldStartingIndex; i < _persons.Count; i++){_persons[i].Order = i.ToString();}}else if (e.Action == NotifyCollectionChangedAction.Add){for (int i = e.NewStartingIndex; i < _persons.Count; i++){_persons[i].Order = i.ToString();}}}
排序
4、相关代码附加:
public class Person : INotifyPropertyChanged{public string Name { get; set; }private string _order;public string Order{get { return _order; }set { _order = value; OnPropertyChanged("Order"); }}public event PropertyChangedEventHandler PropertyChanged;[NotifyPropertyChangedInvocator]protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null){PropertyChangedEventHandler handler = PropertyChanged;if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));}}internal static class Utils{//根据子元素查找父元素public static T FindVisualParent<T>(DependencyObject obj) where T : class{while (obj != null){if (obj is T)return obj as T;obj = VisualTreeHelper.GetParent(obj);}return null;}}
相关代码
5、代码下载地址:
http://download.csdn.net/detail/w_wanglei/6375371
ListBox实现拖拽排序功能相关推荐
- sortable vue 排序_vue 使用 sortable 实现 el-table 拖拽排序功能
本文给大家介绍vue 使用 sortable 实现 el-table 拖拽排序功能,具体内容如下所示: npm 下载: npm install sortablejs --save 引入: import ...
- ListView和ListBox内部拖拽排序原理
其实就是很简单的删除选定的元素,然后在合适的位置添加元素. 下面以listBox为例的代码: using System; using System.Collections.Generic; using ...
- element-ui table行列拖拽排序功能和解决列拖动数据不跟随改变的bug问题
1.引入依赖 sortablejs npm install sortable.js --save 2.在mounted() 函数中分别引入两个自定义的方法 , 分别是行和列的拖动 贴一下这两个方法,拖 ...
- 微信小程序图片上传、多图拖拽排序功能
基于movable-view实现的拖拽功能 可以建一个 dragImg的文件 wxml的代码 <view class="container"><movable-a ...
- html列表拖拽排序插件,JS拖拽排序插件Sortable.js用法实例分析
本文实例讲述了JS拖拽排序插件Sortable.js用法.分享给大家供大家参考,具体如下: 最近由于项目功能设计的原因,需要对table中的行实现拖拽排序功能,找来找去发现Sortable.js能很好 ...
- 全网为数不多清晰可行的在VUE中使用sortable.js实现动态拖拽排序的教程!
目录 0 写在前面的 1 依赖安装 2 手写简单标签演示 3 要点 4 效果 0 写在前面的 首先批评以下文章 (10条消息) sortable.js 实现拖拽_sortablejs_花铛的博客-CS ...
- RecyclerView长按拖拽排序 ,缩短长按响应时间,长按0.1秒就可以开始拖动
RecyclerView长按拖拽排序 ,缩短长按响应时间,长按0.1秒就可以开始拖动 度娘搜索RecyclerView长按拖拽排序,很多文章讲解,没找到缩短长按响应时间的,所以自己研究了一下 先看效果 ...
- 基于movable-view的微信小程序拖拽排序(含源码)
目录 一.前言与效果展示 二.源码 1.目录结构 2.drag.wxml文件 3.drag.wxss文件 (1)drag.less (2)drag.wxss 不会使用less的就用这个 4.drag ...
- html列表拖拽排序插件,可对列表自由拖拽排序的jQuery插件
dragslot.js是一款可以对列表自由拖拽排序的jQuery插件.该插件主要的功能是实现了列表项可以在各个列表中相互拖拽. 对于像todo list, 分配任务列表都可以应用这个效果. 使用方法 ...
最新文章
- 浪潮刘军:为什么说计算力是AI时代“免费的午餐”?
- GitHub 高速上手 ---- 创建密钥,连接
- Exchange Server 2019新功能预览-揭秘被削减的功能
- Taro+react开发(90):列表渲染key值
- 江苏技术师范学院大学机房管理系统[.NET项目]
- 获取元素到页面上的位置
- python网络编程 赵宏_【干货收藏】Python面试指南大全
- 根据call/jmp操作数偏移检测内核是否被rootkit控制
- Windows Server 启用或关闭ping端口
- 机械电钢琴音源 Cinesamples Keyboard In Blue Kontakt
- 联想服务器ThinkServer网卡驱动程序缺失的解决办法
- 输入法变成繁体后改回简体中文
- Win11蓝牙耳机已连接电脑仍外放怎么解决
- IP网络摄像机安装注意事项
- 最全的PC【UA】UserAgent大全
- 毛远丽教授谈机器学习技术在检验医学中的新应用|专家论坛
- css3 实现图片闪过一道光效果 亲测可用
- 一些英文网站,字幕下载网站
- APP - APP监控软件,美团 24 小时不间断定位上热搜
- 什么是建筑中的“光储直柔”