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