drag-drop-gong

Cómo hacer Drag and Drop en C# con DragDrog Gong

DragDrop.Gong es una biblioteca de código abierto para aplicaciones de .NET en WPF que facilita enormemente el trabajo con operaciones de Drag and Drop.

Da igual el lenguaje que uséis, las operaciones de Drag and Drop normalmente nunca son tan sencillas como deberían. De esta forma, es habitual que surjan bibliotecas o frameworks para simplificar el proceso.

WPF no solo no es una excepción, si no que por defecto las operaciones de arrastrar y soltar son un auténtico infierno.

DragDrop.Gong viene a resolver este problema y, de hecho, se ha convertido en casi un estándar. Personalmente, ni se me ocurriría perder el tiempo en hacer un Drag and Drop sin esta librería.

Con esta biblioteca podemos crear operaciones de Drag and Drop de forma sencilla, incluso con funciones realmente avanzadas y potentes.

Alguna de sus características son,

  • Funciona con cualquier ItemsControl, como ListBox, ListView, TreeView o DataGrid
  • Funciona con múltiples selecciones
  • Se puede insertar, mover o copiar un elemento en una colección del mismo control
  • Permite mover o copiar elementos entre controles distintos, incluso aunque el tipo sea diferente
  • Compatible con arquitectura MVVM
  • Permite mostrar Adorners para dar al usuario un preview visual de la operación

Cómo usar DragDrop.Gong

En primer lugare, debemos añadir el paquete NuGet a nuestro proyecto mediante

Install-Package gong-wpf-dragdrop

A continuación, añadimos el namespace

xmlns:dd="clr-namespace:GongSolutions.Wpf.DragDrop;assembly=GongSolutions.Wpf.DragDrop"

DragDrop.Gong funciona mediante la adición de propiedades adicionales y behaviors a nuestros objetos XAML.

Por ejemplo con,

<ListBox ItemsSource="{Binding Collection}"
         dd:DragDrop.IsDragSource="True"
         dd:DragDrop.IsDropTarget="True"

Estamos diciendo que nuestro ListBox es puede iniciar Drags y recibir Drops.

Por supuesto, podemos sobreescribir la acción a realizar al iniciar o finalizar el drop, bindear si el objeto es ‘dragable’ o ‘dropable’ con una propiedad, definir adorners, y cualquier necesidad que podáis tener.

La biblioteca tiene una documentación muy buena, y incluye una colección muy grande de ejemplos que cubren una gran variedad de casuísticas. Os recomiendo echarles un ojo, porque algunos son francamente interesantes.

DragDrop.Gong es Open Source, y todo el código y documentación están disponibles en GitHub - punker76/gong-wpf-dragdrop: The GongSolutions.WPF.DragDrop library is a drag’n’drop framework for WPF