Playlist mit List<T> und ListBox?



  • Hallo zusammen,

    folgende Situation: ich habe vor einem halben Jahr ein Programm mit C++/CLI + Forms geschrieben, dass zum Test von Microcontrollern verwendet wird. Dazu sind Anweisungen und erwartete Resultate in einer XML-Datei gespeichert, die aus einem Modell generiert werden (nicht teil des Programms). Bitte jetzt kein Diskurs drüber ob man das Programm sinnvoller in C# programmiert hätte...
    Zum Rahmenproblem: Bislang reichte es aus, eine Datei laden zu können, nun soll das Ganze erweitert werden, also mehrere Dateien in eine Art "Playlist" geladen werden können, welche ihrerseits geladen und gespeichert werden können soll. d.H. Benutzer drückt auf Start, wenn eine Datei durch ist, wird die nächste geladen.

    Mein Ansatz war folgender: Ich schreibe mir eine Klasse, mit der ich die Filestreams laden, schließen usw. kann. In dieser Klasse befindet sich eine List<T>, in die ich meine Elemente einreihen will. Die List<T> will ich mit einer ListBox anzeigen und bearbeiten (Elemente verschieben, löschen...).
    Die Frage ist: Wie bekomme ich diese Verknüpfung hin?
    (entweder die Frage ist so simpel dass die sonst niemand stellt, oder ich verwendete bisher die falschen Suchbegriffe...)



  • Stichwort: DataBinding

    listBox->DisplayMember = "Name";
    listBox->ValueMember = "Id";
    listBox->DataSource = list;
    

    Für Elemente verschieben, löschen etc. bietet sich aber besser eine BindingList<T> an, da diese das Ereignis 'ListChanged' anbietet (so daß sich die ListBox selbständig bei Änderungen aktualisiert).



  • Danke, das hat mir schon mal wesentlich weiter geholfen! 🙂
    Nur an einer Stelle hakt's leider noch. 😞

    Meine Listenelemente haben folgende Klasse (im Moment ja wenig mehr als ne Struktur)

    public ref class fileInfo
    {
    public:
    	fileInfo(String^, String^);
    	int id;	
    	String^	FilePath; //Voller Dateipfad
    	String^	FileName; //Dateiname
    };
    

    Die Listbox wird folgendermaßen angesprochen

    fiFileList = fpPlaylist->fpGetList();
    listBox1->DisplayMember = "FileName";
    listBox1->ValueMember = "FilePath"; 
    listBox1->DataSource = fiFileList;
    fiFileList->ListChanged += gcnew ListChangedEventHandler(this, &filePlaylist::fiFileList_ListChanged);
    

    Nun besteht das Problem, dass die Liste zwar aufgebaut wird (anhand der Events schön sichtbar) aber in der Listbox entweder nichts auftaucht, oder nur Einträge mit dem Text "fileInfo", was ja der Klassenname ist.



  • Beim Databinding mußt du zwingend Eigenschaften (Properties) verwenden, keine einfachen Klassenmember!



  • Danke, der Hinweis hat mir gefehlt. 👍


Anmelden zum Antworten