Hallo Leute!
ich arbeite zur Zeit an einem Musikabspielprogramm und probiere mich dabei am MVVM-Prinzip.
Jedoch verzweifle ich dabei aufgrund der Verzweigung meiner Klassen. Ich habe meine Models und ViewModels mal vereinfacht dargestellt:
[B]Track[/B]
[list]
[*]Pfad : String
[*]Titel : String
[*]Kuenstler : String
[*]Album : String
[*]Laenge : Double
[/list]
[B]TrackVM[/B]
[list]
[*]_track : Track
[*]Pfad : String
[*]Titel : String
[*]Kuenstler : String
[*]Album : String
[*]Laenge : Double
[/list]
[B]Player[/B]
[list]
[*]AktuellerTrack : Track
[*]Position : Double
[*]Lautstaerke : Double
[/list]
[B]PlayerVM[/B]
[list]
[*]_player : Player
[*]AktuellerTrack : TrackVM
[*]Position : Double
[*]Lautstaerke : Double
[/list]
Mein Problem ist nun, wie ich die Verknüpfung von Model und ViewModel bezüglich der Track-Property in PlayerVM lösen soll.
Ich verstehe deine Frage nicht wirklich - Dein Aufbau ist grundsätzlich so ok würde ich behaupten.
Meinst du, wie du im PlayerVM zu einem TrackVM kommst bzw. wie das TrackVM in das PlayerVM kommen soll? Hast du schon probiert dein Konzept umzusetzen? Evt. geht dir dabei der Knoten auf.
Lg, XXX
Hallo Squizzer,
bzgl. der Synchronisation zwischen Model und ViewModel kannst du z.B. ein Event CurrentTrackChanged in Player bereitstellen.
Es geht mir darum, wie ich es schaffe das das TrackModel des PlayerModels(Player.AktuellerTrack) und das TrackModel des TrackVM vom PlayerVM(PlayerVM.AktuellerTrack._track) gleich sind.
Ich habe es eig schon umgesetzt, nur dies ist noch mein Problem.
Das PlayerModel sollte nichts von einem Track wissen - dafür hast du ja das TrackVM eingeführt:
PlayerVM -> TrackVM -> Track
Lg, XXX
Aber das muss es doch eigentlich. Dafür habe ich ja extra die AktuellerTrack-Property im PlayerModel. Es soll ja bsp. den Track abspielen können und dazu benötigt es den Pfad vom Track.
Hallo allerseits,
so wie ich das verstehe, scheint das Problem zu sein, daß der Player den Track beim Abspielen von selbst ändert, ohne das PlayerViewModel darüber zu benachrichtigen. Deshalb kann das PlayerViewModel auch kein TrackViewModel für den aktuellen Song zur Verfügung stellen kann.
Der Player sollte also irgendeine Möglichkeit haben, auf einen Wechsel des aktuellen Tracks reagieren zu können, also z.B. per Event. Dann kann das PlayerViewModel das Event abonnieren und das AktuellerTrack-Property mit dem entsprechenden TrackViewModel aktualisieren. Wenn du eine fertige Komponente verwendest, gibt es dieses Event bestimmt schon. Wenn du den Player selbst programmiert hast, kannst du ja es relativ einfach implementieren.
Christian
Weeks of programming can save you hours of planning
Vielen Dank MrSparkle. Jedoch habe ich noch eine Frage zu der Aktualisierung der AktuellerTrack-Property. Gibt es da eine bessere Lösung, als einfach ein neues TrackViewModel-Objekt zum veränderten TrackModel zu erzeugen?