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

本文关键字:数据 不适用 适用于 绑定 | 更新日期: 2023-09-27 18:33:45

我有一个列表视图,其中包含用于显示订单的嵌套项目模板。每个订单都显示在扩展器中。这些扩展器有一个内容模板,用于显示每个订单中的所有位置。而这些订单仓位也在扩展器中。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>

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

我现在已经想通了。我需要在数据模板中使用相对源并设置每个扩展器的内容属性。

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

对于内部 ItemsControl,您已经为整个控件定义了控件模板。您必须改为定义项模板

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