在 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),
}
);
我的测试:
我在尝试设置绑定时遇到了一个奇怪的问题。我有一个 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),
}
);
我的测试: