如何在 QML 中动态更新 ListView

How to dynamically update a ListView in QML

我有一个 ListView,它显示用户的所有通知列表。现在,因为我正在使用 Component.onCompleted,如果列表更新,则不会显示新列表,而是显示在实例化期间存在的列表。我们如何解决这个问题?将 Loader 与单独的组件一起使用会有帮助吗?

property int numNotifications: backend_service.num_notifications
property var notifications: []

onNumNotificationsChanged: {
    for(var x=0; x<numNotifications; x++) {
           var notif = backend_service.notifications.get(x);
           notifications.push(notif)
    }
}

Rectangle {
    anchors.horizontalCenter: parent.horizontalCenter
    color: "black"
    height: 500
    width: 0.95 * parent.width
    ListView {
        anchors.fill: parent
        model: notifModel
        delegate: notifDelegate
    }
}

ListModel {
    id: notifModel
    Component.onCompleted: {
        for(var i in notifications) {
                    notifModel.append({"name": notifications[i]})
        }
    }
}

Component {
    id: notifDelegate
    Row {
        spacing: 10
        Text { text: name; color: "white" }
    }
}

Component.onCompleted 仅在构建对象时运行,而不会再次运行。因此,使用该方法向模型添加项目是没有用的,您应该使用报告新数据的函数:

onNumNotificationsChanged: {
    for(var x=0; x<numNotifications; x++) {
           var notif = backend_service.notifications.get(x);
           notifModel.append({"name": notif})
    }
}