Я реализовал Drag and Drop для дерева в WPF, которое работает как задумано. Однако это только добавление корневого элемента (перетаскиваемого) к объекту данных, содержащему значения дерева, но добавление всех дочерних элементов (и их дочерних элементов и т. Д.) В визуальное дерево.
Вот моя первая попытка добавить дочерние объекты в объект данных (это должно добавить первый подуровень):
public void DropNewProjectOrganLocation(OrganLocationViewModel organLocation)
{
_projOrganLocation.Add(organLocation);
ObservableCollection<OrganLocationViewModel> subOrgans = organLocation.SubOrganLocations;
foreach (OrganLocationViewModel node in subOrgans)
{
organLocation.SubOrganLocations.Add(node);
node.ParentOrganLocation = organLocation;
}
}
Теперь, когда я перетаскиваю элемент, у которого нет дочерних элементов, он работает как задумано (и добавляется в дерево объектов, а также в дерево визуалов). Однако, когда я пытаюсь перетащить элемент, имеющий любое количество дочерних элементов, он проходит через кодовый блок foreach
, затем, когда он завершает работу и пытается завершить перетаскивание, он выдает следующее сообщение об ошибке:
An unhandled exception of type 'System.InvalidOperationException' occurred in PresentationCore.dll
Additional information: Collection was modified; enumeration operation may not execute
и я использую метод DoDragDrop
из System.Windows.DragDrop
Вот строка, которая вызывает ошибку:
System.Windows.DragDrop.DoDragDrop(m_DragInfo.VisualSource, data, m_DragInfo.Effects);
Кто-нибудь знает, как я могу рекурсивно добавлять дочерние узлы в дерево объектов?