@@ -97,6 +97,7 @@
9797#include <qqmlengine.h>
9898#pragma GCC diagnostic push
9999#pragma GCC diagnostic ignored "-pedantic"
100+#include <private/qqmlcontext_p.h>
100101#include <private/qqmldelegatemodel_p.h>
101102#include <private/qqmlglobal_p.h>
102103#include <private/qquickitem_p.h>
@@ -757,8 +758,6 @@ QQuickItem *ListViewWithPageHeader::getSectionItem(const QString §ionText, b
757758
758759 QQmlContext *creationContext = m_sectionDelegate->creationContext();
759760 QQmlContext *context = new QQmlContext(creationContext ? creationContext : qmlContext(this));
760− context->setContextProperty(QStringLiteral("section"), sectionText);
761− context->setContextProperty(QStringLiteral("delegateIndex"), -1);
762761 QObject *nobj = m_sectionDelegate->beginCreate(context);
763762 if (nobj) {
764763 QQml_setParent_noEvent(context, nobj);
@@ -766,6 +765,8 @@ QQuickItem *ListViewWithPageHeader::getSectionItem(const QString §ionText, b
766765 if (!sectionItem) {
767766 delete nobj;
768767 } else {
768+ sectionItem->setProperty("text", sectionText);
769+ sectionItem->setProperty("delegateIndex", -1);
769770 sectionItem->setZ(2);
770771 QQml_setParent_noEvent(sectionItem, m_clipItem);
771772 sectionItem->setParentItem(m_clipItem);
@@ -801,8 +802,7 @@ void ListViewWithPageHeader::updateSectionItem(int modelIndex)
801802 if (!item->sectionItem()) {
802803 item->setSectionItem(getSectionItem(sectionText));
803804 } else {
804− QQmlContext *context = QQmlEngine::contextForObject(item->sectionItem())->parentContext();
805− context->setContextProperty(QStringLiteral("section"), sectionText);
805+ item->sectionItem()->setProperty("text", sectionText);
806806 }
807807 } else {
808808 if (item->sectionItem()) {
@@ -923,8 +923,7 @@ ListViewWithPageHeader::ListItem *ListViewWithPageHeader::createItem(int modelIn
923923 polish();
924924 }
925925 if (listItem->sectionItem()) {
926− QQmlContext *context = QQmlEngine::contextForObject(listItem->sectionItem())->parentContext();
927− context->setContextProperty(QStringLiteral("delegateIndex"), modelIndex);
926+ listItem->sectionItem()->setProperty("delegateIndex", modelIndex);
928927 }
929928 adjustMinYExtent();
930929 m_contentHeightDirty = true;
@@ -948,9 +947,10 @@ void ListViewWithPageHeader::itemCreated(int modelIndex, QObject *object)
948947 return;
949948
950949 item->setParentItem(m_clipItem);
950+ // FIXME Why do we need the refreshExpressions call?
951951 QQmlContext *context = QQmlEngine::contextForObject(item)->parentContext();
952− context->setContextProperty(QStringLiteral("ListViewWithPageHeader"), this);
953− context->setContextProperty(QStringLiteral("heightToClip"), QVariant::fromValue<int>(0));
952+ QQmlContextPrivate::get(context)->data->refreshExpressions();
953+ item->setProperty("heightToClip", QVariant::fromValue<int>(0));
954954 if (modelIndex == m_asyncRequestedIndex) {
955955 createItem(modelIndex, false);
956956 refill();
@@ -1116,8 +1116,7 @@ void ListViewWithPageHeader::onModelUpdated(const QQmlChangeSet &changeSet, bool
11161116 for (int i = 0; i < m_visibleItems.count(); ++i) {
11171117 ListItem *item = m_visibleItems[i];
11181118 if (item->sectionItem()) {
1119− QQmlContext *context = QQmlEngine::contextForObject(item->sectionItem())->parentContext();
1120− context->setContextProperty(QStringLiteral("delegateIndex"), m_firstVisibleIndex + i);
1119+ item->sectionItem()->setProperty("delegateIndex", m_firstVisibleIndex + i);
11211120 }
11221121 }
11231122
@@ -1287,8 +1286,7 @@ void ListViewWithPageHeader::layout()
12871286 } else {
12881287 // Update the top sticky section header
12891288 const QString section = m_delegateModel->stringValue(modelIndex, m_sectionProperty);
1290− QQmlContext *context = QQmlEngine::contextForObject(m_topSectionItem)->parentContext();
1291− context->setContextProperty(QStringLiteral("section"), section);
1289+ m_topSectionItem->setProperty("text", section);
12921290
12931291 QQuickItemPrivate::get(m_topSectionItem)->setCulled(false);
12941292 m_topSectionItem->setY(topSectionStickPos);
@@ -1300,19 +1298,18 @@ void ListViewWithPageHeader::layout()
13001298 break;
13011299 delegateIndex--;
13021300 }
1303− context->setContextProperty(QStringLiteral("delegateIndex"), delegateIndex);
1301+ m_topSectionItem->setProperty("delegateIndex", delegateIndex);
13041302 if (item->sectionItem()) {
13051303 QQuickItemPrivate::get(item->sectionItem())->setCulled(true);
13061304 }
13071305 }
13081306 }
13091307 }
1310− QQmlContext *context = QQmlEngine::contextForObject(item->m_item)->parentContext();
13111308 const qreal clipFrom = visibleFrom + (!item->sectionItem() && m_topSectionItem && !QQuickItemPrivate::get(m_topSectionItem)->culled ? m_topSectionItem->height() : 0);
13121309 if (!cull && pos < clipFrom) {
1313− context->setContextProperty(QStringLiteral("heightToClip"), clipFrom - pos);
1310+ item->m_item->setProperty("heightToClip", clipFrom - pos);
13141311 } else {
1315− context->setContextProperty(QStringLiteral("heightToClip"), QVariant::fromValue<int>(0));
1312+ item->m_item->setProperty("heightToClip", QVariant::fromValue<int>(0));
13161313 }
13171314// qDebug() << "ListViewWithPageHeader::layout" << item->m_item;
13181315 pos += item->height();