为什么拖放功能不是拖动对象而是将对象复制到目标项控件
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; }
}
我想在我的应用程序中使用拖放功能,我需要将项目从一个列表框拖到另一个列表框。
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; }
}