public virtual void Drop(DropInfo dropInfo)
        {
            int insertIndex = dropInfo.InsertIndex;
            IList destinationList = GetList(dropInfo.TargetCollection);
            IEnumerable data = ExtractData(dropInfo.Data);

            if (dropInfo.DragInfo.VisualSource == dropInfo.VisualTarget)
            {
                IList sourceList = GetList(dropInfo.DragInfo.SourceCollection);

                foreach (object o in data)
                {
                    int index = sourceList.IndexOf(o);

                    if (index != -1)
                    {
                        sourceList.RemoveAt(index);
                        
                        if (sourceList == destinationList && index < insertIndex)
                        {
                            --insertIndex;
                        }
                    }
                }
            }

            foreach (object o in data)
            {
                destinationList.Insert(insertIndex++, o);
            }
        }
 public virtual void DragOver(DropInfo dropInfo)
 {
     if (CanAcceptData(dropInfo))
     {
         dropInfo.Effects = DragDropEffects.Copy;
         dropInfo.DropTargetAdorner = DropTargetAdorners.Insert;
     }
 }
 protected virtual bool CanAcceptData(DropInfo dropInfo)
 {
     if (dropInfo.DragInfo.SourceCollection == dropInfo.TargetCollection)
     {
         return GetList(dropInfo.TargetCollection) != null;
     }
     else if (dropInfo.DragInfo.SourceCollection is ItemCollection)
     {
         return false;
     }
     else
     {
         if (TestCompatibleTypes(dropInfo.TargetCollection, dropInfo.Data))
         {
             return !IsChildOf(dropInfo.VisualTargetItem, dropInfo.DragInfo.VisualSourceItem);
         }
         else
         {
             return false;
         }
     }
 }
Ejemplo n.º 4
0
        static void DropTarget_PreviewDrop(object sender, DragEventArgs e)
        {
            DropInfo dropInfo = new DropInfo(sender, e, m_DragInfo, m_Format.Name);
            IDropTarget dropHandler = GetDropHandler((UIElement)sender);

            DragAdorner = null;
            DropTargetAdorner = null;

            if (dropHandler != null)
            {
                dropHandler.Drop(dropInfo);
            }
            else
            {
                DefaultDropHandler.Drop(dropInfo);
            }

            e.Handled = true;
        }
Ejemplo n.º 5
0
        static void DropTarget_PreviewDragOver(object sender, DragEventArgs e)
        {
            DropInfo dropInfo = new DropInfo(sender, e, m_DragInfo, m_Format.Name);
            IDropTarget dropHandler = GetDropHandler((UIElement)sender);

            if (dropHandler != null)
            {
                dropHandler.DragOver(dropInfo);
            }
            else
            {
                DefaultDropHandler.DragOver(dropInfo);
            }

            // Update the drag adorner.
            if (dropInfo.Effects != DragDropEffects.None)
            {
                if (DragAdorner == null && m_DragInfo != null)
                {
                    CreateDragAdorner();
                }

                if (DragAdorner != null)
                {
                    DragAdorner.MousePosition = e.GetPosition(DragAdorner.AdornedElement);
                    DragAdorner.InvalidateVisual();
                }
            }
            else
            {
                DragAdorner = null;
            }

            // If the target is an ItemsControl then update the drop target adorner.
            if (sender is ItemsControl)
            {
                UIElement adornedElement = ((ItemsControl)sender).GetVisualDescendent<ItemsPresenter>();

                if (dropInfo.DropTargetAdorner == null)
                {
                    DropTargetAdorner = null;
                }
                else if (!dropInfo.DropTargetAdorner.IsInstanceOfType(DropTargetAdorner))
                {
                    DropTargetAdorner = DropTargetAdorner.Create(dropInfo.DropTargetAdorner, adornedElement);
                }

                if (DropTargetAdorner != null)
                {
                    DropTargetAdorner.DropInfo = dropInfo;
                    DropTargetAdorner.InvalidateVisual();
                }
            }

            e.Effects = dropInfo.Effects;
            e.Handled = true;

            Scroll((DependencyObject)sender, e);
        }
		public void Drop(DropInfo dropInfo)
		{
			var droppedVM = dropInfo.Data;
			var targetVM = dropInfo.TargetItem;

			if (droppedVM is IHierarchy)
			{
				// preparing to refresh UI
				var sourceVM = droppedVM as HierarchyViewModelBase;
				var sourceParentVM = sourceVM.Parent;

				Task.Factory.StartNew(() =>
				{
					ShowLoadingAnimation = true;
					((IHierarchy)droppedVM).SetParent(null, targetVM);
				})
			   .ContinueWith(t =>
			   {
				   if (t.Exception == null)
				   {
					   OnUIThread(() =>
					   {
						   // refresh UI
						   if (sourceParentVM != null)
						   {
							   sourceParentVM.LoadChildrens();
						   }
						   else
						   {
							   RootKnowledgeGroups.Remove(droppedVM as KnowledgeGroupViewModel);
						   }
						   ((HierarchyViewModelBase)targetVM).LoadChildrens();
					   });
				   }
				   ShowLoadingAnimation = false;
			   });
			}
		}
		public void DragOver(DropInfo dropInfo)
		{
			bool canAcceptData = dropInfo.DragInfo != null;

			if (canAcceptData)
			{
				var realSourceItem = dropInfo.DragInfo.SourceItem as HierarchyViewModelBase;
				var realTargetItem = dropInfo.TargetItem as HierarchyViewModelBase;

				canAcceptData = realSourceItem != realTargetItem
							&& realSourceItem is IKnowledgeGroupViewModel
							&& (realTargetItem is IKnowledgeGroupViewModel || realTargetItem is IKnowledgeGroupViewModel)
							&& realSourceItem.Parent != realTargetItem;
				//&& GetCatalogId(realSourceItem) == GetCatalogId(realTargetItem);

				if (canAcceptData)
				{
					dropInfo.Effects = System.Windows.DragDropEffects.Move;
					dropInfo.DropTargetAdorner = DropTargetAdorners.Highlight;
				}
			}
		}