2013-06-19 33 views
6

Được rồi vì vậy tôi có một funky ở đây ... Tôi cần để có thể liên kết với một thuộc tính của ItemsControl cha mẹ từ bên trong một mẫu dữ liệu ItemsControl con:WPF Binding vào parent ItemsControl từ bên trong của trẻ em ItemsControl dữ liệu mẫu

<ItemsControl ItemsSource="{Binding Path=MyParentCollection, UpdateSourceTrigger=PropertyChanged}"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 

       <ItemsControl ItemsSource="{Binding Path=MySubCollection}"> 
        <ItemsControl.ItemTemplate> 
         <DataTemplate> 
          <TextBlock Text="{Binding Path=MyParentCollection.Value, UpdateSourceTrigger=PropertyChanged}"/> 
         </DataTemplate> 
        </ItemsControl.ItemTemplate> 
       </ItemsControl> 

     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

giả sử rằng MyParentCollection (bộ sưu tập bên ngoài) là các loại sau đây:

public class MyObject 
{ 
    public String Value { get; set; } 
    public List<MyChildObject> MySubCollection { get; set; 
} 

Và chúng ta hãy giả định rằng MyChildObject từ lớp trên là của các loại sau đây:

public class MyChildObject 
{ 
    public String Name { get; set; } 
} 

Làm cách nào để liên kết với MyParentCollection.Value từ bên trong mẫu dữ liệu bên trong? Tôi thực sự không thể sử dụng FindAncestor theo loại vì cả hai cấp đều sử dụng cùng loại. Tôi nghĩ có lẽ tôi có thể đặt tên trên bộ sưu tập bên ngoài và sử dụng thẻ ElementName trong ràng buộc bên trong, nhưng điều đó vẫn không thể giải quyết thuộc tính.

Mọi suy nghĩ? Tôi đang mắc kẹt trên một này ...

+0

Bạn không thể sử dụng chế độ FindAncestor và chỉ định cả cấp Loại và tổ tiên? –

+0

hmmm, thậm chí không nghĩ đến cấp độ tổ tiên ... Tôi sẽ xem xét điều đó –

+0

Tôi dường như không thể làm điều đó, ồ ừ –

Trả lời

12

tiết kiệm mục mẹ trong thẻ của đứa trẻ có thể làm việc ItemsControl

<DataTemplate> 

      <ItemsControl ItemsSource="{Binding Path=MySubCollection}" Tag="{Binding .}"> 
       <ItemsControl.ItemTemplate> 
        <DataTemplate> 
         <TextBlock Text="{Binding Path=Tag.Value, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/> 
        </DataTemplate> 
       </ItemsControl.ItemTemplate> 
      </ItemsControl> 

    </DataTemplate> 

của nó chưa được thử nghiệm nhưng cung cấp cho bạn một gợi ý đi đúng hướng :)

+0

Điều này có vẻ đầy hứa hẹn ... Tôi sẽ gây rối với điều này sau và cho bạn biết làm thế nào nó hoạt động –

+0

thử nghiệm và điều này thực sự hoạt động hoàn hảo ... kudos cho mã chưa được kiểm tra nhưng làm việc, không có gì thực sự đã được thay đổi từ mã của bạn –

+0

Hack trong ngày, nhưng vẫn lưu ngày. Cảm ơn nhiều! Tôi hy vọng rằng gắn thẻ gắn thẻ chỉ đơn giản là làm cho một tham chiếu đến bối cảnh ràng buộc và không trùng lặp những gì trong ngữ cảnh. –

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