Пример #1
0
        private void lv_Input_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
        {
            // Get the current mouse position
            Point  mousePos = e.GetPosition(null);
            Vector diff     = startPoint - mousePos;

            if (e.LeftButton == MouseButtonState.Pressed &&
                (Math.Abs(diff.X) > SystemParameters.MinimumHorizontalDragDistance ||
                 Math.Abs(diff.Y) > SystemParameters.MinimumVerticalDragDistance))
            {
                // Get the dragged ListViewItem
                ListView     listView     = sender as ListView;
                ListViewItem listViewItem = FindAnchestor <ListViewItem>((DependencyObject)e.OriginalSource);
                if (listViewItem == null)
                {
                    return;                                 // Abort
                }
                // Find the data behind the ListViewItem
                Models.FileObject item = (Models.FileObject)listView.ItemContainerGenerator.ItemFromContainer(listViewItem);
                if (item == null)
                {
                    return;                                 // Abort
                }
                // Initialize the drag & drop operation
                startIndex = listView.SelectedIndex;
                DataObject dragData = new DataObject("FileObject", item);
                DragDrop.DoDragDrop(listViewItem, dragData, DragDropEffects.Copy | DragDropEffects.Move);
            }
        }
Пример #2
0
        private void lv_Input_Drop(object sender, DragEventArgs e)
        {
            int index = -1;

            if (e.Data.GetDataPresent("FileObject") && sender == e.Source)
            {
                // Get the drop ListViewItem destination
                ListView     listView     = sender as ListView;
                ListViewItem listViewItem = FindAnchestor <ListViewItem>((DependencyObject)e.OriginalSource);
                if (listViewItem == null)
                {
                    // Abort
                    e.Effects = DragDropEffects.None;
                    return;
                }
                // Find the data behind the ListViewItem
                Models.FileObject item = (Models.FileObject)listView.ItemContainerGenerator.ItemFromContainer(listViewItem);
                // Move item into observable collection
                // (this will be automatically reflected to lstView.ItemsSource)
                e.Effects = DragDropEffects.Move;
                index     = viewModel.Files.IndexOf(item);
                if (startIndex >= 0 && index >= 0)
                {
                    viewModel.Files.Move(startIndex, index);
                }
                startIndex = -1;        // Done!

                viewModel.RefreshFileNums();
            }
        }