2013-10-03 160 views
1

我有一個帶有嵌套ItemTemplate的ListView來呈現訂單。 每個訂單都在一個Expander中展示。這些擴展器有一個ContentTemplate用於呈現每個訂單中的所有倉位。而這些訂單頭寸也在擴張機中。 ListView從包含所有訂單的ObservableCollection(AvailableOrders)中獲取其數據。這些訂單對象具有一個ObservableCollection「Items」,它包含此訂單的所有倉位。 但我無法使綁定正常工作。我應該如何正確設置「內膨脹器」的綁定來顯示有關項目的信息?綁定不適用於數據模板中的數據模板

所有的想法都讚賞!

<ListView ItemsSource="{Binding VMOrder.AvailableOrders}"> 
<ListView.ItemTemplate> 
    <DataTemplate> 
     <Expander Content="{Binding}"> 
      <Expander.HeaderTemplate> 
       <DataTemplate> 
        <StackPanel Orientation="Horizontal"> 
         <TextBlock Text="Order " /> 
         <TextBlock Text="{Binding Id}" /> 
        </StackPanel> 
       </DataTemplate> 
      </Expander.HeaderTemplate> 
      <Expander.ContentTemplate> 
       <DataTemplate> 
        <ItemsControl ItemsSource="{Binding Items}"> 
         <ItemsControl.Template> 
          <ControlTemplate> 
           <Expander> 
            <Expander.HeaderTemplate> 
             <DataTemplate> 
              <TextBlock Text="{Binding Material.Name}" /> 
             </DataTemplate> 
            </Expander.HeaderTemplate> 
            <Expander.ContentTemplate> 
             <DataTemplate> 
              <TextBlock Text="TEST" /> 
             </DataTemplate> 
            </Expander.ContentTemplate> 
           </Expander> 
          </ControlTemplate> 
         </ItemsControl.Template> 
        </ItemsControl> 
       </DataTemplate> 
      </Expander.ContentTemplate> 
     </Expander> 
    </DataTemplate> 
</ListView.ItemTemplate> 
</ListView> 

回答

1

對於內部的ItemsControl,您已經定義了整個控件的控件模板。你必須定義ItemTemplate來代替

<ItemsControl ItemsSource="{Binding Items}"> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <Expander> 
        <Expander.HeaderTemplate> 
         <DataTemplate> 
          <TextBlock Text="{Binding Material.Name}" /> 
         </DataTemplate> 
        </Expander.HeaderTemplate> 
        <Expander.ContentTemplate> 
         <DataTemplate> 
          <TextBlock Text="TEST" /> 
         </DataTemplate> 
        </Expander.ContentTemplate> 
       </Expander> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 
+0

是的,謝謝!你是對的,我有錯誤的模板。 –

3

我已經想通了。 我需要在數據模板中使用相對源並設置每個擴展器的內容屬性。

<ListView ItemsSource="{Binding VMOrder.AvailableOrders}"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <Expander Content="{Binding}"> 
       <Expander.HeaderTemplate> 
        <DataTemplate> 
         <StackPanel Orientation="Horizontal"> 
          <TextBlock Text="Order " /> 
          <TextBlock Text="{Binding DataContext.Id, RelativeSource={RelativeSource FindAncestor, AncestorType=Expander}}" /> 
         </StackPanel> 
        </DataTemplate> 
       </Expander.HeaderTemplate> 
       <Expander.ContentTemplate> 
        <DataTemplate> 
         <ItemsControl ItemsSource="{Binding Items}"> 
          <ItemsControl.ItemTemplate> 
           <DataTemplate> 
            <Expander Content="{Binding}"> 
             <Expander.HeaderTemplate> 
              <DataTemplate> 
               <TextBlock Text="{Binding DataContext.Material.Name, RelativeSource={RelativeSource FindAncestor, AncestorType=Expander}}" /> 
              </DataTemplate> 
             </Expander.HeaderTemplate> 
             <Expander.ContentTemplate> 
              <DataTemplate> 
               <TextBlock Text="{Binding DataContext.Material.Description, RelativeSource={RelativeSource FindAncestor, AncestorType=Expander}}" /> 
              </DataTemplate> 
             </Expander.ContentTemplate> 
            </Expander> 
           </DataTemplate> 
          </ItemsControl.ItemTemplate> 
         </ItemsControl> 
        </DataTemplate> 
       </Expander.ContentTemplate> 
      </Expander> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView>