问题描述
我正在尝试使用 MVVM 编写拖放功能,这将允许我从一个拖动 PersonModel code> ListView 到另一个。
I am trying write Drag and Drop functionality using MVVM which will allow me to drag PersonModel objects from one ListView to another.
这几乎可以工作,但是我需要能够从DragEventArgs中获取源ListView的ItemsSource,我不知道该怎么做。
This is almost working but I need to be able to get the ItemsSource of the source ListView from the DragEventArgs which I cant figure out how to do.
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); } }
任何帮助将不胜感激。
谢谢!
推荐答案
我在
这样做的方法是将Source List DragDrow.DoDragDrop方法ie。
The way to do it is to pass the source ListView into the DragDrow.DoDragDrop method ie.
在处理ListView的PreviewMouseMove的方法中 -
In the method which handles the PreviewMouseMove for the ListView do-
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方法将代码更改为
and then in the OnHandleDrop method change the code to
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); } } }
这篇关于WPF拖放 - 从DragEventArgs获取原始来源信息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!