2015-05-19 2 views
0

Я пытаюсь понять последовательность изменений свойств и событий мыши внутри ListView.ListView single selection change and drag event

  1. Для обнаружения изменения существует разница между наблюдением selectedIndex vs selectedItem?

  2. Чтобы перетащить элементы ListView, существует ли разница между регистрацией событий onDrag .. против ListView и каждого ListCell?

  3. Есть ли какой-либо сценарий, когда событие «onDragDetected» будет получено до того, как будет изменена модель выбора (которую я наблюдаю)?

Благодаря

ответ

0

Для обнаружения изменения есть разница между соблюдением SelectedIndex против SelectedItem?

Не совсем; Я думаю, что это только вопрос того, что вам больше всего подходит.

Чтобы перетаскивать элементы ListView есть какая-то разница между регистрирующим onDrag .. событиями против ListView против каждого ListCell?

Я буду выступать за регистрацию с помощью ListCell. Нет прямого способа проверить событие мыши на ListView, а затем определить, в какой ячейке произошло событие мыши. Вам нужно будет отступить на выбранном элементе, и это на самом деле не семантически то же самое. (Например, как бы вы справляетесь перетащить на пустые ячейки, которые не изменили бы выбор ...?)

Есть ли сценарий, когда событие «onDragDetected» будет получено перед моделью выбора (который я наблюдаю) обновляется?

Это зависит от реализации. I думаю, что в текущей реализации использует событие mousePressed для обработки выбора (хотя я не уверен), поэтому он должен запускаться до обнаружения перетаскивания, но действительно ли вы хотите полагаться на эту реализацию, не меняющуюся в будущей версии?

IMHO, полагаясь на выбранный элемент, просто чувствует себя не так. Это семантически отличается от того, что вы хотите: вы действительно хотите знать «какой элемент пользователь нажал», а не «какой элемент выбран». Конечно, эти два связаны друг с другом, но они не одно и то же, поэтому в какой-то мере вы будете вводить зависимость от API выбора, который должен быть независим от того, что вы пытаетесь достичь. Это, безусловно, мнение. Ваш пробег может варьироваться ...

+0

Согласен. Также BehaviorSkinBase определяет обработчик событий мыши, а ListViewBehavior обрабатывает mousePressed, который обновляет модель выбора и фокусируется. Сцена содержит материал dnd, и кажется, что жест может быть инициирован на событии mousePressed. – shnplr