2009-03-10 28 views
8

Tôi có một mạng lưới các mục được điền bằng cách sử dụng databinding. Trong lưới, tôi có một số DataTemplate cho một số ô nhất định. Tôi cần truy cập vào DataContext của phần tử gốc (phần tử đang lưu trữ lưới) để tôi có thể truy cập các ràng buộc bổ sung để hỗ trợ bảng dữ liệu của tôi.Làm cách nào để truy cập vào DataContext gốc trong DataTemplate trong WPF?

Vì vậy, bạn có:

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

Tôi muốn {Binding Supports} trên TheDataSourceWithItemsAndSupports, nhưng tôi không thấy làm thế nào để làm điều đó. Tôi đã thử chỉ định {Binding} nhưng luôn trả về null. Tôi cũng đã thử sử dụng RelativeSource FindAncestor, nhưng điều đó mang lại null quá.

Bất kỳ manh mối nào?

Trả lời

14

Có thể thử

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

Tôi nghĩ đường dẫn liên kết sẽ là DataContext.Supports, nhưng đây cũng là ý tưởng của tôi. –

+0

Bạn đã đúng, đã sửa đổi. – user76035

+0

Điều này làm việc, nhưng tôi đã phải làm một số mã hóa nhiều hơn (kịch bản được đưa ra ở trên không phải là một đại diện chính xác của tình hình ở bàn tay). – Inferis

0

Nó sẽ làm việc theo cách bạn mô tả. Điều duy nhất tôi thấy DataTemplate của bạn không phải là ItemTemplate. Bạn cũng nên nhìn vào cửa sổ đầu ra để xem nơi các ràng buộc không thành công.

0

Giải pháp của tôi là để lộ cả lớp DataContext bằng cách thực hiện lĩnh vực này

get 
{ 
    return this; 
} 

và sau đó liên kết với nó.

Các vấn đề liên quan