1

注文を表示するためのネストされた ItemTemplate を持つ ListView があります。各注文は Expander 内に表示されます。これらの 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>
4

2 に答える 2

3

I've figured it out now. I need to use a relative source in the data templates and set the content property of each expander.

<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>
于 2013-10-05T00:46:02.343 に答える
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>
于 2013-10-04T02:30:57.807 に答える