Sali,
ich beginne gerade mich mit WPF und MVVM richtig zu beschäftigen und habe folgende Frage bzw. bräuchte Hilfe.
Ich möchte innerhalb einer ListView verschiedene Objekte ( ViewModels) unterhalb mir anzeigen lassen:
Ich glaube als Analogie könnte man sagen wie in jedem Chat.... Wha..sApp
Da habe ich ja auch Textnachrichten dann mal ein Bild dann mal wieder 2 Textnachrichten und dann vielleicht ein Standortanzeige.
So ich wollte etwas ähnliches (andere Objekte). Ich habe für meine Objekte verschiedene ViewModels. Ich weiss jetzt nur nicht wie ich die am geschicktesten untereinander bringe...
Was nehme ich anstatt einer ListView?
Ich habe Objekt A davon Leitet sich Objekt B (+VieModel) und Objekt C (+ViewModel) ab.
Jetzt habe ich von B und C ViewModels erzeugt. Das bringt mir ja wahrscheinlich nicht allzuviel. für eine Liste, oder ?
Brauche ich für Objekt A auch ein ViewModel ? Und kann dann Irgendwie eine Collection von diesem erzeugen ?
Hmm ich hoffe man versteht was ich will. Bzw. kann mir einer Helfen ?
Merci
Hallo,
Wenn du dir die Objekte in einer Liste anzeigen lassen möchtest, dann wäre eine herangehensweise, dass du dir ein ViewModel erstellst das du dann an die View bindest.
In diesem ViewModel stellst du dann ein Property IEnumerable MessageContentxyz zur Verfügung das vom Typ Basisklasse/Interface.
Dieses Property kannst du dann an die ListView binden und mittels Templates und Styling so anpassen, dass es deinen wünschen entspricht.
Das Stichwort sidn Template Selectoren: https://msdn.microsoft.com/de-de/library/system.windows.controls.datatemplateselector%28v=vs.110%29.aspx
Einfach Verberbung nutzen und einen Template Selector schreiben
ImageMessageVM : MessageVM
TextMessageVM : MessageVM
VideoMessageVM : MessageVM
Du kannst dann einfach eine ObersableCollection<MessageVM> Message in deinem Haupt-ViewModel definieren.
ImageTools for Silverlight: http://imagetools.codeplex.com | http://www.silverdiagram.net | http://www.cleancodedeveloper.de b:::
Einfacher als mit TemplateSelector gehts wenn man (Default-)DataTemplates für die ViewModels erstellt. Dann wird die Ansicht in der ListView automatisch je nach VM-Type angepasst (auch wenn neue dazukommen muss man nichts weiter machen als ein neues DataTemplate dafür anzulegen).
Mit dem TemplateSelector kann man komplexere Sachen realisieren, da ist man maximal flexiblel, in den meisten (einfachen) Fällen braucht man ihn aber nicht.
gruß
sth_Weird
Linux is for free...if your time is worth nothing
Fluchen ist die einzige Sprache, die jeder Programmierer perfekt beherrscht
++++++++++++++++++++~+
@sth_Weird: Verstehe nicht.
ImageTools for Silverlight: http://imagetools.codeplex.com | http://www.silverdiagram.net | http://www.cleancodedeveloper.de b:::
Templates können explizit für einen Datentypen erstellt werden.
Unterscheidet man durch Zuweisung über den Datentypen entfällt der Templateselektor.
<DataTemplate Type="{x:Type namespace:ClassA}">....</DataTemplate>
<DataTemplate Type="{x:Type namespace:ClassB}">...</DataTemplate>
Implementieren A und B das gleiche Interface, so wird je nach ankommendem Objekt "von" dem Interface das entsprechende DataTemplate genutzt.