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