WPF: Как реализовать Перетаскивание с вложенными (иерархическими) средствами управления

Я не знаю, решит ли это проблему, но я думаю, что вы можете упростить ваш View примерно так (менее бесполезное выражение select):

SELECT e.entity_id AS id,
   v1.value AS name,
   e.sku as sku,
   d1.value AS version
FROM mguu_catalog_product_entity e
LEFT JOIN mguu_catalog_product_entity_varchar v1 ON (e.entity_id = v1.entity_id)
LEFT JOIN mguu_catalog_product_entity_varchar d1 ON (e.entity_id = d1.entity_id)
LEFT JOIN mguu_eav_attribute AS mea ON (v1.attribute_id = mea.attribute_id)
LEFT JOIN mguu_eav_entity_type AS meet ON (meet.entity_type_code = 'catalog_product')
WHERE v1.store_id = 0
AND mea.attribute_code = 'name'
AND mea.entity_type_id = meet.entity_type_id
AND d1.attribute_id = 171;

В документации MySql:

ОБНОВЛЕНИЕ: таблица или таблицы, которые должны быть обновлены в операторе UPDATE, могут быть ссылками просмотра, которые объединены. Если представление является представлением объединения, по крайней мере один компонент представления должен быть обновляемым (это отличается от INSERT).

В операторе UPDATE для нескольких таблиц обновленные ссылки на таблицы в операторе должны быть базовыми таблицами или обновляемыми ссылками на представления. Необновленные ссылки на таблицы могут быть материализованными представлениями или производными таблицами.

https://dev.mysql.com/doc/refman/8.0/en/view-updatability.html

7
задан Scrappydog 20 February 2009 в 22:01
поделиться

4 ответа

Просто первые мысли, почему бы не использовать TreeView вместо ListView, если Вы собираетесь иметь вложение?

2
ответ дан 7 December 2019 в 10:08
поделиться

Поскольку MouseMove и большинство других в wpf являются маршрутизируемыми событиями, вы можете просто проверить e.OriginalSource в обычном обработчике событий. Затем вы можете решить, какой элемент перетаскивать, в зависимости от того, на каком элементе находилась мышь, возможно, используя один из тех методов вспомогательного метода «найти родителя, который удовлетворяет условию». Кроме того, вы можете установить e.Handled , если у вас есть несколько элементов в визуальном дереве, подписывающихся на событие.

4
ответ дан 7 December 2019 в 10:08
поделиться

AllowDrop должен иметь значение true для любого элемента управления.

0
ответ дан 7 December 2019 в 10:08
поделиться

Я прошел через аналогичный проблема при работе с приложением со списками вложенных пользовательских элементов управления.
Я обработал все это в событии PreviewMouseButtonDown на уровне управления. Я проверяю координаты точки, по которой щелкнули. Если он пришел откуда-то из родительского ListBoxItem , которого нет в ListBox , я обрабатываю там DragDrop.DoDragDrop () . Если он пришел изнутри ListBoxItem , я позволил ему перейти к событию PreviewMouseButtonDown дочернего ListBox . Я проверяю, где находится местоположение в дочернем ListBox, чтобы увидеть, какой элемент был нажат, чтобы я мог взять его и вместо этого выполнить DragDrop на этом уровне.

Псевдокод выглядит следующим образом:

Parent ListBox  
--  PListBoxItem1  
--  PListBoxItem2  
--  PListBoxItem3  
----    Child ListBox  
------  Child ListBoxItem1  
------  Child ListBoxItem2  -Click drag started here  
------  Child ListBoxItem3  

Код:

Parent_List_Box_PreviewMouseButtonDown  
If mouse position is not inside the Child ListBox Then  
  DoDragDrop() on the Parent level with this ListBoxItem  
End If

Child_ListBox_PreviewMouseButtonDown  
Determine which item the mouse was clicked on relative to the Child ListBox  
DoDragDrop() on the Child level with this ListBoxItem  

Итак, поскольку щелчок находился внутри Child's ListBox , событие переходит к самому низкому обработчику, который соответствует критериям для DragEvent .

Надеюсь, это поможет!

0
ответ дан 7 December 2019 в 10:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: