Wie können in Prism (Composite Application Guidelines) Ansichten dynamisch in TabControl geladen werden?

8

In einer Prism v2-Anwendung definiere ich zwei Regionen, jeweils ein tabitem in einer tabcontrol:

%Vor%

Im Bootstrapper werden zwei Module geladen und jeder injiziert eine Ansicht in jedes tabitems:

%Vor%

Nun möchte ich natürlich die Entkopplungsmagie, über die ich weiterlese, ausführen und eines der Module auskommentieren und sehen, dass sein Tab-Element überhaupt nicht erscheint. Stattdessen gibt es noch zwei TabItems und eins ist leer. Dies sagt mir, dass meine Anwendung Daten und UI immer noch eng miteinander verbindet, wie in den schlechten alten WinForm-Tagen.

Also, was muss ich tun, um dies dynamisch zu machen, so dass sich die Benutzeroberfläche dynamisch ändert, basierend darauf, welche Module geladen werden, dh dass ich 10 Module / Ansichten in meinem Bootstrapper laden könnte und dort automatisch 10 TabItems wären das TabControl?

ZWISCHEN ANTWORT:

Wenn ich nur eine Region in einem TabControl mache:

%Vor%

und laden Sie dann beide Steuerelemente in MainRegion:

%Vor%

Dann bekomme ich ein TabControl mit zwei Tabs, jedes mit einer Sicht darauf, was ich will.

Aber die TabItem-Header sind nicht definiert. Wie definiere ich den Header dynamisch (z. B. nicht im XAML, aber dynamisch in den View-Klassen)?

    
Edward Tanguay 09.03.2009, 12:17
quelle

3 Antworten

10

Das funktioniert auch:

%Vor%

und dann in der Shell:

%Vor%     
Carlos 24.04.2009, 00:36
quelle
7

Nett.

Sie können die ViwewName-Eigenschaft in der Ansicht entfernen und die Bindung für den TabItem-Wert in Value="{Binding DataContext.HeaderInfo}" ändern ... Dabei ist HeaderInfo eine Eigenschaft Ihres DataContext-Objekts - dh das Geschäftsobjekt, das Der Tab-Eintrag repräsentiert. Das ist ein bisschen eleganter.

    
Pete Maher 15.05.2009 13:39
quelle
0

Sie sind mit Ihrer Änderung auf dem richtigen Weg.

Die Art, wie ich den Header normalerweise erhalte, besteht darin, ein Objekt anstelle eines Steuerelements zur Region hinzuzufügen und es mit dem Steuerelement zu formatieren.

Dieses Objekt definiert eine Eigenschaft (sagen wir MyHeaderProperty), mit der ich dann mit einem ItemContainerStyle auf dem TabControl binde.

Ich weiß nicht, ob es einen Weg gibt, das zu erreichen, ohne auf einen solchen Trick zurückzugreifen (ein Zwischenobjekt und ein DataTemplate).

    
Denis Troller 13.03.2009 15:46
quelle