为什么拖放功能不会拖放,但是会将对象复制到目标项目控件中

问题描述 投票:-3回答:2

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

我正在使用GongSolution.WPF.DragDrop.dll;组件版本2.1.0

来自[从[在此处输入链接描述] [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。

请某人指导/建议此处可能存在的问题。

或建议我在任何库中使用拖放功能。

非常感谢。

wpf listbox drag
2个回答
0
投票
  //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);
            }
        }
      }

0
投票

当我使用列表框集合时。我的视图在集合更改方面没有更新,因此,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; }

        }
© www.soinside.com 2019 - 2024. All rights reserved.