private void ListView_PreviewMouseMove(object x)
        {
            if (x is MouseEventArguments mouseArgs)
            {
                if (mouseArgs.E.LeftButton == MouseButtonState.Pressed)
                {
                    var mousePos = mouseArgs.E.GetPosition(null);
                    var diff     = _startingPoint - mousePos;

                    if (Math.Abs(diff.X) > SystemParameters.MinimumHorizontalDragDistance ||
                        Math.Abs(diff.Y) > SystemParameters.MinimumVerticalDragDistance)
                    {
                        if (mouseArgs.Sender is ListView listView)
                        {
                            var listViewItem = TreeHelper.FindAnchestor <ListViewItem>((DependencyObject)mouseArgs.E.OriginalSource);
                            if (listViewItem != null)
                            {
                                var eCigarette = (ECigarette)listView.ItemContainerGenerator.ItemFromContainer(listViewItem);
                                if (eCigarette != null)
                                {
                                    _startingIndex = ECigarettes.IndexOf(eCigarette);
                                    DataObject dragData = new DataObject("CustomFormat", eCigarette);
                                    DragDrop.DoDragDrop(listViewItem, dragData, DragDropEffects.Move);
                                }
                            }
                        }
                    }
                }
            }
        }
        private void ListView_Drop(object x)
        {
            if (x is DragEventArguments dragArgs)
            {
                if (dragArgs.E.Data.GetDataPresent("CustomFormat"))
                {
                    if (dragArgs.E.Data.GetData("CustomFormat") is ECigarette eCigarette)
                    {
                        if (dragArgs.Sender is ListView listView)
                        {
                            var currentListViewItem = TreeHelper.FindAnchestor <ListViewItem>((DependencyObject)dragArgs.E.OriginalSource);
                            if (currentListViewItem != null)
                            {
                                if (listView.ItemContainerGenerator.ItemFromContainer(currentListViewItem) is ECigarette currentItem)
                                {
                                    int indexOfCurrentItem = listView.Items.IndexOf(currentItem);

                                    if (_currentListViewItem != null)
                                    {
                                        AdornerLayer.GetAdornerLayer(_currentListViewItem).Remove(_adorner);
                                    }

                                    ECigarettes.Remove(eCigarette);
                                    ECigarettes.Insert(indexOfCurrentItem, eCigarette);
                                }
                            }
                        }
                    }
                }
            }
        }
 private void SetupCigarettes()
 {
     ECigarettes.Add(new ECigarette("Admiral Vape", "RDA"));
     ECigarettes.Add(new ECigarette("Artisan Vapor Company", "RDA"));
     ECigarettes.Add(new ECigarette("Cigoteket AB", "RDTA"));
     ECigarettes.Add(new ECigarette("Cloud 90 Ltd", "RTA"));
     ECigarettes.Add(new ECigarette("Celtic Vapours Ltd", "RTA"));
     ECigarettes.Add(new ECigarette("Dr Vapor Ltd", "RDTA"));
     ECigarettes.Add(new ECigarette("Admiral Vape", "RDA"));
     ECigarettes.Add(new ECigarette("Artisan Vapor Company", "RDA"));
     ECigarettes.Add(new ECigarette("Cigoteket AB", "RDTA"));
     ECigarettes.Add(new ECigarette("Cloud 90 Ltd", "RTA"));
     ECigarettes.Add(new ECigarette("Celtic Vapours Ltd", "RTA"));
     ECigarettes.Add(new ECigarette("Dr Vapor Ltd", "RDTA"));
 }
        private void ListView_DragEnter(object x)
        {
            Debug.WriteLine("ListView_DragEnter");
            if (x is DragEventArguments dragArgs)
            {
                if (!dragArgs.E.Data.GetDataPresent("CustomFormat") || dragArgs.Sender == dragArgs.E.Source)
                {
                    dragArgs.E.Effects = DragDropEffects.None;

                    if (dragArgs.Sender is ListView listView)
                    {
                        var currentListViewItem = TreeHelper.FindAnchestor <ListViewItem>((DependencyObject)dragArgs.E.OriginalSource);
                        if (currentListViewItem != null)
                        {
                            _currentIndex = ECigarettes.IndexOf(currentListViewItem.Content as ECigarette);
                            int lengthOfCollection = ECigarettes.Count - 1;

                            if (_currentIndex > _startingIndex && _currentIndex != 0 && _currentIndex + 1 <= lengthOfCollection)
                            {
                                var nextContainer = (ListViewItem)listView.ItemContainerGenerator.ContainerFromIndex(_currentIndex + 1);
                                _currentListViewItem = nextContainer;

                                _adorner = new DashedRectangleAdorner(_currentListViewItem);
                                AdornerLayer.GetAdornerLayer(_currentListViewItem).Add(_adorner);
                            }
                            else
                            {
                                _currentListViewItem = currentListViewItem;
                                _adorner             = new DashedRectangleAdorner(currentListViewItem);
                                AdornerLayer.GetAdornerLayer(_currentListViewItem).Add(_adorner);
                            }
                        }
                    }
                }
            }
        }