Мое приложение - wpf mvvm, использующее привязки RelayCommand \ EventToCommand для событий.Мое приложение выполняет обычное перетаскивание из ListBox на ItemsControl (на самом деле это элемент управления изображением с ItemsControl вверху, который удерживает перетаскиваемые элементы).ListBox заполняется коллекцией vm ObservableCollection.И ItemsControl - это также ObservableCollection, в который я вставляю удаленные элементы MyObj.
Когда я перетаскиваю элементы из ListBox и помещаю их в \ on в ItemsControl \ image, все это работает нормально.В PreviewMouseLeftButtonDownCommand я использую System.Windows.Media.VisualTreeHelper для рекурсивного обхода визуального дерева, поэтому при перетаскивании из ListBox я могу найти перетаскиваемый элемент MyObj.Но когда я пытаюсь перетащить элемент из ItemsControl, код не работает.Все, что я могу вернуть, - это преобразование элемента DataTemplate (ярлык).Итак, мой вопрос:как получить выбранный элемент из моего ItemsControl, когда срабатывает RelayCommand \ EventToCommand PreviewMouseLeftButtonDownCommand?
виртуальная машина C #:
PreviewMouseLeftButtonDownCommand = new RelayCommand<MouseButtonEventArgs>(e =>
{
if (e.Source is ListBox)
{
// get dragged list box item
ListBox listBox = e.Source as ListBox;
ListBoxItem listBoxItem = VisualHelper.FindAncestor<ListBoxItem>((DependencyObject)e.OriginalSource);
// Find the data behind the listBoxItem
if (listBox == null || listBoxItem == null) return;
MyObj tag = (MyObj)listBox.ItemContainerGenerator.ItemFromContainer(listBoxItem);
// Initialize the drag & drop operation
DataObject dragData = new DataObject("myObj", tag);
DragDrop.DoDragDrop(listBoxItem, dragData, DragDropEffects.Move);
}
else if (e.Source is ItemsControl)
{
ItemsControl itemsControl = e.Source as ItemsControl;
object item = VisualHelper.FindAncestor<UIElement>((DependencyObject)e.OriginalSource);
if (itemsControl == null || item == null) return;
MyObj tag = (MyObj)itemsControl.ItemContainerGenerator.ItemFromContainer(item);
// Initialize the drag & drop operation
DataObject dragData = new DataObject("myObj", tagDragging);
DragDrop.DoDragDrop(item, dragData, DragDropEffects.Move);
}
});