예제 #1
0
        private void MoveElementWithChange()
        {
            if (IsReadOnly)
            {
                return;
            }

            if (movedElementFrom == null || movedElementTo == null || movedElementFrom == movedElementTo)
            {
                return;
            }

            DirElement            newParent   = movedElementTo.Parent;
            BindingList <Element> bindingList = (listView.ItemsSource as BindingList <Element>);
            int index = 0;

            if (movedElementTo.Delete())
            {
                index = bindingList.IndexOf(movedElementTo);
                bindingList.Remove(movedElementTo);
            }
            else
            {
                System.Windows.MessageBox.Show("Не вдається перемістити елемент");
                return;
            }

            if (!newParent.Exists)
            {
                movedElementTo.Restore();
                bindingList.Insert(index, movedElementTo);
                System.Windows.MessageBox.Show("Не вдається перемістити елемент");
                return;
            }

            try
            {
                movedElementFrom.Parent = newParent;
                movedElementFrom.Name   = movedElementTo.Name;
            }
            catch
            {
                movedElementTo.Restore();
                bindingList.Insert(index, movedElementTo);
                System.Windows.MessageBox.Show("Не вдається перемістити елемент");
                return;
            }

            int oldIndex = bindingList.IndexOf(movedElementFrom);

            bindingList.Remove(movedElementFrom);
            if (index > oldIndex)
            {
                index = (index - 1) >= 0 ? index - 1 : 0;
            }
            bindingList.Insert(index, movedElementFrom);

            int i = 0;

            while (i < bindingList.Count)
            {
                if (!bindingList[i].Exists)
                {
                    bindingList.RemoveAt(i);
                    i--;
                }

                i++;
            }

            movedElementFrom = null;
            movedElementTo   = null;
        }