ListBox实现拖拽排序功能
生活随笔
收集整理的這篇文章主要介紹了
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、排序功能實現:
數據源:
3、排序功能實現:
為數據集合實現CollectionChanged事件,當數據集合發生變化時執行:
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实现拖拽排序功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一些常用UI控件汇总
- 下一篇: 谷歌正使用 Jetpack Compos