Laden...

Usercontrol mit Comboboxen

Erstellt von MikeReg vor einem Jahr Letzter Beitrag vor einem Jahr 600 Views
M
MikeReg Themenstarter:in
4 Beiträge seit 2022
vor einem Jahr
Usercontrol mit Comboboxen

Hallo zusammen,

Ich habe so gut es ging in den Archiven geblättert, um meine Themen zu finden, aber so richtig passt leider keines, das ich gefunden habe.

Folgende Ausgangslage:

Ich würde gern mehrere Instanzen eines UserControl in einem TabControl im Hauptfenster anzeigen.

**Ich habe zwei Punkte, bei denen ich nicht weiterkomme:

Punkt 1:**

Diese UserControl-Instanzen sollen in anderen Tabs des TabControls "gespiegelt" werden (Oder von einer Tabseite auf die andere verschoben werden, je nachdem was einfacher zu realisieren ist.)
Ist es sinnvoller zwei Instanzen zu erzeugen, die auf die gleichen DependencyProperties zugreifen,
oder ist es besser das Control "umzukopieren"?

Punkt 2:

Zudem sollen der** Inhalt einer Combobox** auf einer dieser UserControl Instanzen neu geladen werden, wenn sich der Inhalt einer anderen Combobox (einer anderen UserControl Instanz) ändert. Das Databinding der UserControls aus dem Hauptfenster und das Befüllen der Comboboxen funktioniert.
Aber wie ich das dynamische Befüllen der Comboboxen über UserControlgrenzen hinweg hinbekommen soll, kann ich mir überhaupt nicht vorstellen.

_Ist so etwas prinzipiell denkbar?

Kann mir jemand einen Tipp geben, wie man hier am besten vorgeht?_

Vielen Dank für eure Kommentare

190 Beiträge seit 2012
vor einem Jahr

Hallo
schau dir mal das MVVM-Entwurfsmuster an, dann lösen sich deine Probleme von alleine.
[Artikel] MVVM und DataBinding

  • Wer lesen kann, ist klar im Vorteil
  • Meistens sitzt der Fehler vorm Monitor
  • "Geht nicht" ist keine Fehlermeldung!
  • "Ich kann programmieren" != "Ich habe den Code bei Google gefunden"

GidF

A
764 Beiträge seit 2007
vor einem Jahr

Hallo MikeReg

Du kannst das lösen, indem auf jedem Tab eine Instanz von deinem UserControl unterbringst, du alle auf genau ein ein ViewModel gebunden sind.
Den entsprechenden Link, wie man das macht, hat dir Wilfried geschrieben. Bei konkreten Fragen kannst du natürlich nochmal hier nachfragen.

Eine Frage noch: Wenn das UserControl auf allen Tabs angezeigt werden soll, warum machst du das dann nicht einfach 'neben' das TabControl?

Gruß
Alf

M
MikeReg Themenstarter:in
4 Beiträge seit 2022
vor einem Jahr

@Wilfried: Danke für den link, ich arbeite mich gerade durch das Beispielprojekt

@Alf Ator: Danke für den Tipp.
Eine Frage noch: Wenn das UserControl auf allen Tabs angezeigt werden soll, warum machst du das dann nicht einfach 'neben' das TabControl?

Das würde gehen, aber ich will eines der UserControls auf einem Tab anzeigen und ein anderes UC auf einem anderen Tab.
Es soll sozusagen eine Übersichtsseite (TAB) geben, auf der alle UCs zu sehen sind, und daneben "Unterkategorien" (Tabs) in denen die UCs der einzelnen Komponenten nochmal einzustellen sind.

Also etwa so:
MAIN TAB:
UC Motor
UC Getriebe
UC Fahrwerk

Motor TAB:
UC Motor
Detail Einstellung Motor

Getriebe TAB:
UC Getriebe
Detail Einstellung Getriebe

Fahrwerk TAB:
UC Fahrwerk
Detail Einstellung Fahrwerk

M
MikeReg Themenstarter:in
4 Beiträge seit 2022
vor einem Jahr

@Wilfried & @Alf Ator: Vielen Dank für eure Antworten. Das hat mir sehr geholfen, mehr vom Thema Databinding zu verstehen. Inzwischen laufen die äquivalenten UserControls 🙂 Punkt 1 ist erledigt.

Aber Punkt 2 meiner Liste kann ich mit dem Beispielprojekt nicht so wirklich lösen.

Nochmal ein Beispiel:

Im User Control Motor stehen die Motoren:
UC Motor:
V6
V8
V12
Reihenmotor
Sternmotor

Wenn jetzt V8 ausgewählt ist, sollen im UserControl Getriebe nur noch die Werte
UC Getriebe:
ZF Planetengetriebe Typ 355
ZF Planetengetriebe Typ 356
ZF Planetengetriebe Typ 357

Wenn jetzt V6 ausgewählt ist, sollen im UserControl Getriebe nur noch die Werte
Renk R832 und
Renk R833

verfügbar sein.

Jetzt ist aber der OnPropertyChanged Aufruf im MotorViewModel, das wiederum nichts vom GetriebeViewModel weiß.

Könnt ihr mir sagen, wie man dieses Problem löst?

Vielen Dank im Voraus

4.931 Beiträge seit 2008
vor einem Jahr

Wenn du Daten zwischen den ViewModels austauschen willst, dann müssen diese sich kennen (d.h. gib entsprechende Referenzen weiter).
Alternative wäre ein übergeordnetes ViewModel, das dann die Daten an die Sub-ViewModels weiterreicht.

M
MikeReg Themenstarter:in
4 Beiträge seit 2022
vor einem Jahr

@Th69: Vielen Dank für die Infos und die Links. Dann arbeite ich mich da mal ein...

4.931 Beiträge seit 2008
vor einem Jahr

Die Links sind nur meine generelle Signatur...

Aber hier noch extra für dich: Communication between ViewModels with MVVM (schau dir also mal die MVVM-Frameworks an, z.B. mittels MVVM Light: Communicate Between Two View Models Using Messenger).