2009-03-10 13 views
8

Mam siatkę elementów, która jest wypełniona przy użyciu wiązania danych. W siatce mam DataTemplate dla niektórych komórek. Muszę uzyskać dostęp do DataContext elementu głównego (tego, który hostuje siatkę), aby uzyskać dostęp do dodatkowych powiązań w celu obsługi mojego datatemplate.Jak uzyskać dostęp do głównego DataContext w DataTemplate w WPF?

Więc trzeba:

Window 
    Window.DataContext = TheDataSourceWithItemsAndSupports 
    DataGrid.ItemsSource = {Binding Items} 
     DataTemplate 
      ListBox.ItemsSource = {Binding Supports} 

chcę {Binding Supports} na TheDataSourceWithItemsAndSupports, ale nie widzę w jaki sposób to zrobić. Próbowałem określając {Binding}, ale zawsze zwraca null. Próbowałem również używać RelativeSource FindAncestor, ale to również daje null.

Jakieś wskazówki?

Odpowiedz

14

Może spróbuj

Window Name="TheWindow" 
... 
ListBox.ItemsSource = {Binding DataContext.Supports, ElementName=TheWindow} 
+0

Myślę, że ścieżka wiążąca byłaby DataContext.Supports, ale był to również mój pomysł. –

+0

Masz rację, poprawiono. – user76035

+0

To zadziałało, ale musiałem zrobić więcej kodu (scenariusz podany powyżej nie był dokładną reprezentacją sytuacji). – Inferis

0

To powinno działać tak, jak opisano. Jedyne, co widzę twój DataTemplate nie jest ItemTemplate. Powinieneś również spojrzeć na okno wyjściowe, aby zobaczyć, gdzie zawiodły wiązania.

0

Moje rozwiązanie było narazić całą klasę DataContext poprzez wdrożenie tej dziedzinie

get 
{ 
    return this; 
} 

a następnie wiązanie się z nim.

Powiązane problemy