Estoy tratando de escribir funcionalidad de Arrastrar y Soltar utilizando MVVM que me va a permitir arrastrar PersonModel objetos de una ListView a otro.

Esto es algo de trabajo, pero tengo que ser capaz de obtener el ItemsSource de la fuente ListView de la DragEventArgs que no puedo averiguar cómo hacerlo.

private void OnHandleDrop(DragEventArgs e)
{
    if (e.Data != null && e.Data.GetDataPresent("myFormat"))
    {
        var person = e.Data.GetData("myFormat") as PersonModel;
        //Gets the ItemsSource of the source ListView
        ..

        //Gets the ItemsSource of the target ListView and Adds the person to it
        ((ObservableCollection<PersonModel>)(((ListView)e.Source).ItemsSource)).Add(person);
    }
}

Cualquier ayuda sería muy apreciada.

Gracias!

En mi arrastrar y soltar aplicación que he creado de la clase DragManager (que es singleton) y se añade un campo privado draggingElement. Porque sólo uno de los elementos que se pueden arrastrar en el tiempo.

OriginalEl autor Jason Quinn | 2010-12-23

1 Comentario

  1. 4

    He encontrado la respuesta en otra pregunta

    La manera de hacerlo es pasar la fuente de control ListView en el DragDrow.Método DoDragDrop es decir.

    En el método que se encarga de la PreviewMouseMove para el ListView hacer-

    private static void List_MouseMove(MouseEventArgs e)
    {
        if (e.LeftButton == MouseButtonState.Pressed)
        {
            if (e.Source != null)
            {
                DragDrop.DoDragDrop((ListView)e.Source, (ListView)e.Source, DragDropEffects.Move);
            }
        }
    }

    y, a continuación, en la OnHandleDrop método de cambiar el código para

    private static void OnHandleDrop(DragEventArgs e)
    {
        if (e.Data != null && e.Data.GetDataPresent("System.Windows.Controls.ListView"))
        {
            //var person = e.Data.GetData("myFormat") as PersonModel;
            //Gets the ItemsSource of the source ListView and removes the person
            var source = e.Data.GetData("System.Windows.Controls.ListView") as ListView;
            if (source != null)
            {
                var person = source.SelectedItem as PersonModel;
                ((ObservableCollection<PersonModel>)source.ItemsSource).Remove(person);
    
                //Gets the ItemsSource of the target ListView
                ((ObservableCollection<PersonModel>)(((ListView)e.Source).ItemsSource)).Add(person);
            }
        }
    }

    OriginalEl autor Jason Quinn

Dejar respuesta

Please enter your comment!
Please enter your name here