Wie kann in WPF von der DataTemplate einer enthaltenen ListBox in den Window DataContext eingebunden werden?

7

Ich habe ein WPF-Fenster mit einem Ansichtsmodell, das als DataContext festgelegt wurde, und habe eine ListBox mit einem DataTemplate und seiner ItemsSource, die an das Ansichtsmodell gebunden sind, wie im folgenden Beispiel:

Modell anzeigen:

%Vor%

MainWindow.xaml:

%Vor%

Natürlich wird die TeamName-Eigenschaft der Team-Klasse nicht in den ListBox-Elementen angezeigt, da jedes Element der LisBox der DataContext der List.ItemTemplate ist und den DataContext des Fensters außer Kraft setzt.

Die Frage ist: Wie kann ich mit der TeamName-Eigenschaft des Ansichtsmodells (Window.DataContext) von der DataTemplate der ListBox aus arbeiten?

    
Rafa Castaneda 24.12.2009, 20:18
quelle

4 Antworten

12

Ich würde die l: Team-Deklaration in den Window.Resources-Abschnitt extrahieren und sie aus dem DataContext und der DataTemplate referenzieren:

%Vor%     
Aviad P. 24.12.2009, 20:37
quelle
14

Sie können auch die RelativeSource-Bindung verwenden, das ist nicht so kompliziert:

%Vor%     
cz_dl 25.12.2009 01:09
quelle
1

Ich würde ein Ansichtsmodell für ein Teammitglied mit einer TeamName -Eigenschaft erstellen, etwa wie folgt:

%Vor%

Dann wird Ihr XAML so sauber aussehen wie in Ihrem Beispiel. Mit MVVM sollten Sie keine exotischen Bindetricks in der Ansicht benötigen. Alles, was Sie brauchen, sollte über das Ansichtsmodell verfügbar sein.

    
Danko Durbić 24.12.2009 21:06
quelle
0

Warum binden Sie Ihren DataContext nicht an das Team und machen dann Ihre Artikelquelle an team.members gebunden?

Normalerweise ordne ich meinen Datenkontext in meinem Codebehind ein, aber es sollte immer noch nicht anders für Sie sein.

itemsouce="{Binding Path=" team.Members "}

Ich schätze, es ist wirklich das Gleiche wie das, was Aviad vorgeschlagen hat. Ich ordne nur Datenkontext in meinem Codebehind zu.

    
ecathell 26.12.2009 02:58
quelle