Почему функция перетаскивания не перетаскивает, а копирует объект в целевой элемент управления - PullRequest
0 голосов
/ 10 октября 2019

Я хотел бы использовать функцию перетаскивания в моем приложении, где мне нужно перетаскивать элементы из одного списка в другой.

Я использую 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.

Попросите кого-нибудь помочь / подсказать, в чем может быть проблема.

Или предложите мне в любой библиотеке функцию перетаскивания.

Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 20 октября 2019

Как я использовал списки коллекции. Мое представление не обновлялось при изменении коллекции, следовательно, Listbox1 по-прежнему показывает элементы, которые были перетащены, хотя он уже перетащен. После перетаскивания каждого элемента по-прежнему отображаются элементы, и при попытке перетаскивания элемента происходит сбой приложения, поскольку не было перетаскиваемого элемента.

Проблема устранена после реализации с ObservableCollection с обработчиком событий CollectionChnaged.

предыдущий код, который не удался:

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; }

        }
0 голосов
/ 11 октября 2019
  //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);
            }
        }
      }
...