У меня есть представление списка WPF, которое связано со списком объектов. Одним из отображаемых элементов является вычисляемое свойство (только для чтения, возвращает строку), для вычисления которого требуется небольшое количество времени. Когда окно первоначально загружается (или в любое время, когда пользовательский интерфейс обновляется событием Notify), пользовательский интерфейс будет зависать при возникновении этой привязки данных. Что мне было интересно, так это хороший механизм для решения этой проблемы (в идеале я хотел бы сделать что-то вроде выделения серого с помощью счетчика и текста «Обработка ...» или аналогичного).
Я думал, что смогу сделать это, захватив начало события, связанного с данными, и запустив историю (или аналогичную) и остановив историю, когда был запущен конец события, связанного с данными, но я не могу найти события такого рода.
Есть ли рекомендуемый механизм для работы с длинной привязкой данных или существуют события, которые я ищу, но я смотрю не в том месте? Любая помощь будет оценена.
РЕДАКТИРОВАТЬ: Я могу получить значок вращения (Cursor.Wait), пока данные получены и привязаны к данным (используя части решения ниже), но теперь нужно знать, когда привязка данных завершено. Кажется, что событие .Loaded срабатывает, когда элемент управления помещается на экран (что происходит сразу), но не происходит при обновлении данных. Похоже, что для ListView нет события типа OnDataBoundCompleted, есть идеи / мысли о том, как получить уведомление о завершении процесса привязки данных?
РЕДАКТИРОВАТЬ: Глядя на событие TargetUpdated сейчас, но получить некоторые странные результаты. Если я помещаю окно сообщения в обработчик событий для TargetUpdated, то пользовательский интерфейс обновляется (ListView отображает данные), а затем отображается окно сообщения. Если я вырезал окно сообщения и просто установил переменную (то есть IsBusyCursor = Cursors.Arrow), это делается до того, как ListView отобразит данные.
** РЕШЕНИЕ: ** Я закончил тем, что создал новый объект представления и установил Cursor = Wait, затем зацикливался на объектах, которые я ранее привязал к ListView, и создавал объекты представления из них (что вызвало выполнение вычисляемого свойства) затем, как только список объектов презентации был создан, свяжите его с ListView и выполните stet Cursor = Arrow. Разочарованный, похоже, не является событием типа DataBinding Completed (или каким-либо другим событием, инициируемым после завершения привязки данных, которое обновляет пользовательский интерфейс), но это решение работает.