Ich weiß nicht, für mich sieht das recht umständlich aus. Ich würde erst einmal die Daten in der Objektliste ablegen und mich danach um die Darstellung kümmern. An das dem aktuellen ListViewItem zugeordneten Objekt kommst Du dann mit einem einfachen Typecast, wie Du es ja bereits tust.
Delphi-Quellcode:
var
DeineKlasse: TDeineKlasse;
begin
DeineKlasse := TDeineKlasse(ListView.Selected.Data);
if Assigned(DeineKlasse) then
DeineKlasse.MachWas;
Seit wann hinterlässt Free MemoryLeaks?