绑定List <keyvaluepair <string,list <datatable =“”>&gt;&gt;项控制wpf

时间:2016-11-03 18:50:30

标签: c# wpf binding itemscontrol

当展开列表中的键值对项时,我需要显示2个数据表。并且键值对项的键应该是扩展器头。 第一个表应绑定到第一个数据网格,第二个表绑定到第二个网格。 问题是第二个项目&#39; ItemsControl上显示与第一个相同的值。 (我的猜测是数据网格的ItemsSource绑定不正确,因为VM正确生成了ListOfKeyValuePairs的数据。)

<!-- Data grid template -->
<DataTemplate x:Key="ValuesTemplate">
  <Grid>
    <Grid.RowDefinitions>
      <RowDefinition Height="Auto" />
      <RowDefinition Height="Auto" />
      <RowDefinition />
    </Grid.RowDefinitions>

    <TextBlock Text="data grid header text" Margin="20,0,0,0" Grid.Row="2" />
    <DataGrid Grid.Row="0" ItemsSource="{Binding [0]}" />
    <DataGrid Grid.Row="1" ItemsSource="{Binding [1]}" />
  </Grid>
</DataTemplate>

<!-- List of data tables -->
<ItemsControl ItemsSource="{Binding ListOfKeyValuePairs}" VirtualizingStackPanel.IsVirtualizing="True">
  <ItemsControl.ItemTemplate>
    <DataTemplate>
      <Expander IsExpanded="True" Margin="0,0,0,10">
        <Expander.Header>
          <TextBlock Text="{Binding Key}" Margin="0,0,20,0" VerticalAlignment="Top" />
        </Expander.Header>
        <ContentControl Content="{Binding Value}" ContentTemplate="{StaticResource ValuesTemplate}" ScrollViewer.CanContentScroll="True" Margin="20,0,0,0" />
      </Expander>
    </DataTemplate>
  </ItemsControl.ItemTemplate>
</ItemsControl>

1 个答案:

答案 0 :(得分:1)

您的代码运行正常。但您在Grid内使用了ValuesTemplate。这两个项目

<DataGrid ItemsSource="{Binding [0]}" />
<DataGrid ItemsSource="{Binding [1]}" />

处于同一位置。一个DataGrid覆盖了另一个DataGrid。使用定义的行,如

<DataGrid Grid.Row="0" ItemsSource="{Binding [0]}" />
<DataGrid Grid.Row="1" ItemsSource="{Binding [1]}" />

或使用简单的StackPanel