Laden...

Ansprechen von Objekten per Code

Erstellt von serpiano vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.997 Views
S
serpiano Themenstarter:in
16 Beiträge seit 2011
vor 12 Jahren
Ansprechen von Objekten per Code

Hallo zusammen,

ich habe in WPF (XAML-Code) ein TabControl ohne Inhalt definiert.
Zur Laufzeit erzeuge ich dynamisch TabItems, die ich dann dem TabControl zuweise.
In dem TabItem habe ich einen ScrollViewer, darin ein Grid und in einer Zelle des Grids ein selbst definiertes Objekt.

Code dazu:


TabItem ti1 = new TabItem();
ScrollViewer sv = new ScrollViewer();
Grid grid1 = new Grid();
RowDefinition rd1;
rd1 = new RowDefinition();
ColumnDefinition cd1;
cd1 = new ColumnDefinition();
...
MyProgressBar mp1 = new MyProgressBar();
...
grid1.Children.Add(mp1);
...
sv1.Content = grid1;
ti1.Content = sv1;
tc.Items.Add(ti1);

Nun möchte ich im Code das Object mp1 ansprechen. Das soll beim Betätigen eines Buttons erfolgen. Im entsprechenden Click-Event ist aber nur das TabControl bekannt.
Die ganzen TabItems kann ich per For-Schleife durchlaufen, aber wie gehts dann weiter?
Kann mir da jemand bitte einen Tip geben?

Danke!

Gruss
serpiano

3.430 Beiträge seit 2007
vor 12 Jahren

Hallo serpiano,

in WPF sollte man die GUI Objekte wenn möglich nie im Code anfassen.
Deshalb gibt es sog. MVVM Pattern welches bestimmte Regeln und Strukturen aufzeigt mit welchen man diese Probleme umgehen kann.

Dein bestimmtes Problem kann man vermutlich ganz einfach über das DataBinding lösen.
D.h. du kennt im Code die GUI gar nicht sondern nur die Objekte welche du der GUI zur Verfügung stellst.
Dementsprechend kannst du dann im Code auch direkt auf die Objekte zugreifen und brauchst dich nicht um die GUI zu kümmern

Hier ein Tutorial zum Thema MVVM: MVVM Tutorial

Du kannst es aber auch so machen wie du momentan gestartet bist (mit MVVM wäre es aber viel viel sauberer zu lösen).
In WPF gibt es mehrere Wege um an die Controls zu kommen (Stichwort VisualTree bzw. LogicalTree).
Hier ein interessanter Thread dazu: WPF - ways to find controls

Gruß
Michael

S
serpiano Themenstarter:in
16 Beiträge seit 2011
vor 12 Jahren

Hallo Michael,

da ich leider erst zur Laufzeit weiss, wieviel TabItems ich benötige, kann ich auch erst dann diese anlegen (alternativ könnte ich natürlich auch die Übermenge der möglichen TabItems anlegen).

Ich habe das Problem nun so gelöst, dass ich beim Anlegen der TabItems auch eine Liste mit den Objekten anlege, die ich später ansprechen möchte. Dann muss ich nicht lange nach den Objekten suchen.

Trotzdem vielen Dank für den Tip mit dem MVVM-Tutorial, das werde ich mir mal anschauen.

Gruss
serpiano