绑定不适用于数据模板中的数据模板

时间:2013-10-03 21:02:55

标签: c# wpf binding datatemplate

我有一个带有嵌套ItemTemplate的ListView用于显示订单。 每个订单都在扩展器中呈现。这些Expanders有一个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>

2 个答案:

答案 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>

答案 1 :(得分: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>