您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

WPF C#:通过拖放重新排列列表框中的项目

WPF C#:通过拖放重新排列列表框中的项目

我试着用observablecollection创建一个,看看

    ObservableCollection<Emp> _empList = new ObservableCollection<Emp>();

    public Window1()
    {
        InitializeComponent();

        _empList .Add(new Emp("1", 22));
        _empList .Add(new Emp("2", 18));
        _empList .Add(new Emp("3", 29));
        _empList .Add(new Emp("4", 9));
        _empList .Add(new Emp("5", 29));
        _empList .Add(new Emp("6", 9));
        list@R_199_2419@1.DisplayMemberPath = "Name";
        list@R_199_2419@1.ItemsSource = _empList;

        Style itemContainerStyle = new Style(typeof(List@R_199_2419@Item));
        itemContainerStyle.Setters.Add(new Setter(List@R_199_2419@Item.AllowDropProperty, true));
        itemContainerStyle.Setters.Add(new EventSetter(List@R_199_2419@Item.PreviewMouseLeftButtonDownEvent, new MouseButtonEventHandler(s_PreviewMouseLeftButtonDown)));
        itemContainerStyle.Setters.Add(new EventSetter(List@R_199_2419@Item.DropEvent, new DragEventHandler(list@R_199_2419@1_Drop)));
        list@R_199_2419@1.ItemContainerStyle = itemContainerStyle;
    }

拖放过程

    void s_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {

        if (sender is List@R_199_2419@Item)
        {
            List@R_199_2419@Item draggedItem = sender as List@R_199_2419@Item;
            DragDrop.DoDragDrop(draggedItem, draggedItem.DataContext, DragDropEffects.Move);
            draggedItem.IsSelected = true;
        }
    }

    void list@R_199_2419@1_Drop(object sender, DragEventArgs e)
    {
        Emp droppedData = e.Data.GetData(typeof(Emp)) as Emp;
        Emp target = ((List@R_199_2419@Item)(sender)).DataContext as Emp;

        int removedIdx = list@R_199_2419@1.Items.IndexOf(droppedData);
        int targetIdx = list@R_199_2419@1.Items.IndexOf(target);

        if (removedIdx < targetIdx)
        {
            _empList.Insert(targetIdx + 1, droppedData);
            _empList.RemoveAt(removedIdx);
        }
        else
        {
            int remIdx = removedIdx+1;
            if (_empList.Count + 1 > remIdx)
            {
                _empList.Insert(targetIdx, droppedData);
                _empList.RemoveAt(remIdx);
            }
        }
    }

注意:

c# 2022/1/1 18:15:11 有468人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶