在 ItemsControl 的 DataTemplate 中绑定 DataGrid

Binding DataGrid Within A DataTemplate of ItemsControl

我在尝试设置绑定时遇到了一个奇怪的问题。我有一个 ItemsControl,我用它来呈现一个 WrapPanel,它包含一个 DataGrid 作为它的 DataTemplate。最后,我想使用 WrapPanel 为列表中绑定到 ItemsControl 的每个项目显示一个 DataGrid。现在它创建了正确数量的 DataGrid 和 headers,但实际上没有数据被绑定。我没有足够的 WPF 经验来知道我在哪里误入歧途。项目本身是元组 objects。为什么我的数据值没有被绑定?

<ItemsControl ItemsSource="{Binding Path=GetDestinctCodeCounts}" Grid.Row="2" Grid.ColumnSpan="6" HorizontalAlignment="Center" HorizontalContentAlignment="Stretch">
  <ItemsControl.Template>
    <ControlTemplate>
      <WrapPanel IsItemsHost="True" />
    </ControlTemplate>
  </ItemsControl.Template>
  <ItemsControl.ItemTemplate>
    <DataTemplate>
      <DataGrid AutoGenerateColumns="False" IsReadOnly="True" Margin="2,0,2,2" ItemsSource="{Binding}">
        <DataGrid.Columns>
          <DataGridTextColumn Width="Auto" Binding="{Binding Item1}" Header="Code" />
          <DataGridTextColumn Width="Auto" Binding="{Binding Item2}" Header="Count" />
        </DataGrid.Columns>
      </DataGrid>
    </DataTemplate>
  </ItemsControl.ItemTemplate>
</ItemsControl>

public List<Tuple<string, int>> GetDestinctCodeCounts
    {
        get
        {
            if (UnQualifiedZips.Count > 0)
            {
                var distinctCount = UnQualifiedZips.GroupBy(x => x.Item2).Select(x => new Tuple<string, int>(x.Key, x.Count())).ToList();
                return distinctCount;
            }
            else return new System.Collections.Generic.List<Tuple<string, int>>();
        }
    }

你的 GetDistinctCodeCounts 给你一个 IEnumerable < tuple < string, int > >

但是你需要一个IEnumerable< IEnumerable< tuple < string,int>> >

小测试:将 属性 GetDistinctCodeCounts 替换为:

   List<List<Tuple<string, int>>> tuples = new List<List<Tuple<string, int>>>();
        tuples.Add(
            new List<Tuple<string, int>>()
            {
             new Tuple<string,int>("a",1),
             new Tuple<string,int>("b",2),
            }
            );

        tuples.Add(
           new List<Tuple<string, int>>()
            {
             new Tuple<string,int>("a",1),
             new Tuple<string,int>("b",2),
            }
           );

我的测试: