Я не знаю, решит ли это проблему, но я думаю, что вы можете упростить ваш 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
Просто первые мысли, почему бы не использовать TreeView вместо ListView, если Вы собираетесь иметь вложение?
Поскольку MouseMove
и большинство других в wpf являются маршрутизируемыми событиями, вы можете просто проверить e.OriginalSource
в обычном обработчике событий. Затем вы можете решить, какой элемент перетаскивать, в зависимости от того, на каком элементе находилась мышь, возможно, используя один из тех методов вспомогательного метода «найти родителя, который удовлетворяет условию». Кроме того, вы можете установить e.Handled
, если у вас есть несколько элементов в визуальном дереве, подписывающихся на событие.
AllowDrop должен иметь значение true для любого элемента управления.
Я прошел через аналогичный проблема при работе с приложением со списками вложенных пользовательских элементов управления.
Я обработал все это в событии 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
.
Надеюсь, это поможет!