2017-05-10 3 views
0

Ich habe einen ListView von Items und ich brauche, dass jeder element eine einzigartige id hat.Eindeutige ID für jedes Element eines ListView

Aber ich habe zwei Bedingungen auf meinem Artikel:

  • ich nicht index verwenden können, weil mein Itemskann (drag & drop) bewegt werden, so dass ihre index ändern wird.

  • Jeder Itemkann viele Male angezeigt werden, so dass es keine Eigenschaft dieser Elemente, die mich um sie zu unterscheiden helfen.

war meine Idee, so etwas zu tun:

ListView { 
    id: list 
    property int uniqueId: 0 

    width: 180; height: 200 

    model: myModel 

    delegate: Text { 
     property int uniqueid: list.uniqueId 
     text: uniqueid 
    } 
    Component.onCompleted: list.uniqueId++ 
} 

Aber es nicht funktioniert, weil, wenn list.uniqueId aktualisiert wird, wird es meine Artikel-ID aktualisieren und sie alle haben die gleiche ID (id = list.uniqueId)

Wie könnte ich fortfahren?

Antwort

1

Nun, wenn Sie ein schweres (oder nicht schaffen) die Bindung, wird es nicht automatisch Update:

delegate: Text { 
     Component.onCompleted: text = uniqueId++ 
} 

Aber ich glaube nicht, dies zu vermeiden wirklich Ihr Design beheben. Was Sie tun sollten, ist, dass der eindeutige ID-Teil vollständig in die Modelldaten implementiert wird.

+0

Oh, danke, ich dachte, es hat das gleiche Verhalten, wenn Sie es in einer Funktion tun. Ich möchte das in der Ansicht tun, weil es nur ein Ansichtsproblem ist und ich mein Datenmodell nicht ändern möchte. Ich muss jedoch ein wenig darüber nachdenken und Sie könnten Recht haben. –

+1

Wird es kein Problem geben, wenn Sie die 'ListView' verschieben und die Delegierten zerstört und neu erstellt werden? – derM

+0

Das habe ich angedeutet. Er möchte jedoch möglicherweise nur eine eindeutige ID, aber keine dauerhafte ID. – dtech

Verwandte Themen