为什么拖放功能不是拖动对象而是将对象复制到目标项控件

Why does drag and drop function does not drag but copy the object to target items control

我想在我的应用程序中使用拖放功能,我需要将项目从一个列表框拖到另一个列表框。

I am using GongSolution.WPF.DragDrop.dll; assembly version 2.1.0

来自[在此处输入 link 描述][1]。

为了检查库的使用,我添加了两个带有 LT1、LT2 的列表框。

<ListBox Name="LT1"
                ItemTemplate="{StaticResource itemlisttemplate}"
                 Grid.Column="0"
                 dd:DragDrop.IsDragSource="True"
                 dd:DragDrop.IsDropTarget="True"
                 SelectionMode="Single" 
                 ScrollViewer.HorizontalScrollBarVisibility="Auto">
<ListBox Name="LT2"
                ItemTemplate="{StaticResource itemlisttemplate}"
                 Grid.Column="1"
                 dd:DragDrop.IsDragSource="True"
                 dd:DragDrop.IsDropTarget="True"
                 SelectionMode="Single" 
                 ScrollViewer.HorizontalScrollBarVisibility="Auto">

以及将一些项目添加到 Listbox1 (LT1) 中的示例代码,这样我就可以尝试将其拖放到 Listbox2 (LT2) 中

System.Object[] ItemObject = new System.Object[10];  
for (int i = 0; i <= 3; i++)  
{  
   ItemObject[i] = "Item" + i;  
}  
LT1.Items.AddRange(ItemObject);

启动应用程序时,我可以看到两个项目已添加到 listbox1 中。但是当我尝试将项目从 listbox1 复制到 listbox2 时,而不是拖动,它被复制并移动到 listbox2。

请求某人指导/建议这里可能存在的问题。

或者建议我使用任何具有拖放功能的库。

非常感谢。

  //when you try to drag the element make sure,

       void .....DragEvent1(......)
       {
        if (listBox1.SelectedItems.Count > 0)
        {
            //in case unknown error
            try
            {

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
      }

因为我正在使用列表框集合。我的视图没有在集合更改时得到更新,因此,Listbox1 仍然显示被拖动的项目,尽管它已经被拖动了。拖动每个项目后,它仍然显示项目,并且在尝试拖动项目时,应用程序崩溃,因为没有要拖动的项目。

在使用带有 CollectionChnaged 事件处理程序的 ObservableCollection 实施后问题得到解决。

之前失败的代码:

System.Object[] ItemObject = new System.Object[10];  
for (int i = 0; i <= 3; i++)  
{  
   ItemObject[i] = "Item" + i;  
}  
LT1.Items.AddRange(ItemObject);

通过 ObservableCollection 解决:

    private ObservableCollection<TodoItem> items;
            public MainWindow()
            {
                InitializeComponent();

                items = new ObservableCollection<TodoItem>()
                {
                    new TodoItem(){TitleText = "Item1"},
                    new TodoItem(){TitleText = "Item2"},
                    new TodoItem(){TitleText = "Item3"},
                };
                lt1.ItemsSource = items;
            }
public class TodoItem
        {
            public string TitleText { get; set; }

        }