Laden...

[MVVM] Problem mit untergeordneter Klassenstrukturen

Erstellt von Squizzer vor 11 Jahren Letzter Beitrag vor 11 Jahren 1.151 Views
S
Squizzer Themenstarter:in
14 Beiträge seit 2011
vor 11 Jahren
[MVVM] Problem mit untergeordneter Klassenstrukturen

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.

1.378 Beiträge seit 2006
vor 11 Jahren

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

5.742 Beiträge seit 2007
vor 11 Jahren

Hallo Squizzer,

bzgl. der Synchronisation zwischen Model und ViewModel kannst du z.B. ein Event CurrentTrackChanged in Player bereitstellen.

S
Squizzer Themenstarter:in
14 Beiträge seit 2011
vor 11 Jahren

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.

1.378 Beiträge seit 2006
vor 11 Jahren

Das PlayerModel sollte nichts von einem Track wissen - dafür hast du ja das TrackVM eingeführt:

PlayerVM -> TrackVM -> Track

Lg, XXX

S
Squizzer Themenstarter:in
14 Beiträge seit 2011
vor 11 Jahren

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.

5.658 Beiträge seit 2006
vor 11 Jahren

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

S
Squizzer Themenstarter:in
14 Beiträge seit 2011
vor 11 Jahren

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?