WPF拖放 – 从DragEventArgs获取原始源信息

我正在尝试使用MVVM编写拖放function,这将允许我将PersonModel对象从一个ListView拖到另一个。

这几乎可以工作,但我需要能够从DragEventArgs获取源ListView的ItemsSource,我无法弄清楚如何做。

 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)(((ListView)e.Source).ItemsSource)).Add(person); } } 

任何帮助将不胜感激。

谢谢!

我在另一个问题中找到了答案

这样做的方法是将源ListView传递给DragDrow.DoDragDrop方法,即。

在处理ListView的PreviewMouseMove的方法中 –

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

然后在OnHandleDrop方法中将代码更改为

 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)source.ItemsSource).Remove(person); //Gets the ItemsSource of the target ListView ((ObservableCollection)(((ListView)e.Source).ItemsSource)).Add(person); } } }