ItemsSource绑定的每行一个数据网格
本文关键字:一个 数据 数据网 网格 绑定 ItemsSource | 更新日期: 2023-09-27 18:10:10
目前在我的XAML文件中定义了一个单一的数据网格,它绑定(itemsource)一个数据集合(称为视图),并且它显示在一个大表中(如预期的那样并且工作完美)。
然而,我现在需要的是创建一个数据网格每行,从而结束了许多数据网格都包含单行数据。
我唯一能想到的是:
-动态地在代码中创建数据网格(以某种方式)并从XAML中删除它
-用特定的数据行填充这些动态创建的数据网格的itemsource,例如(伪代码):
谁有更好的建议?这能按我提议的方式完成吗?有没有更好/更简单的方法?为视图的每一行
创建新的数据网格
将row指定为项源绑定
原因-客户希望在单独的页面上打印每一行,所以我将创建许多数据网格,并将每个数据网格传递给独立的printvisual来实现这一点。
代码:// this is the datasource, essentially we want to show one recipe per printed page (so per datagrid)
List<ViewRecipe> View
XAML: <DataGrid ItemsSource="{Binding View}"
AutoGenerateColumns="False"
Height="Auto"
CanUserAddRows="False"
CanUserDeleteRows="False"
CanUserResizeColumns="False"
CanUserResizeRows="False"
CanUserReorderColumns="False"
IsReadOnly="True"
GridLinesVisibility="None">
<DataGrid.ColumnHeaderStyle>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="FontWeight"
Value="Bold" />
<Setter Property="FontSize"
Value="12" />
</Style>
</DataGrid.ColumnHeaderStyle>
<DataGrid.Columns>
<DataGridTextColumn Header="Type"
Width="200"
FontSize="12"
Binding="{Binding Path=Name}" />
<DataGridTemplateColumn Header="Ingredients"
Width="*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<DataGrid AutoGenerateColumns="False"
CanUserAddRows="False"
CanUserDeleteRows="False"
CanUserResizeColumns="False"
CanUserResizeRows="False"
CanUserReorderColumns="False"
IsReadOnly="True"
GridLinesVisibility="None"
ItemsSource="{Binding Ingredients}">
<DataGrid.ColumnHeaderStyle>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="FontWeight"
Value="Bold" />
<Setter Property="FontSize"
Value="12" />
</Style>
</DataGrid.ColumnHeaderStyle>
<DataGrid.Columns>
<DataGridTextColumn Header="Ingredients"
Width="*"
FontSize="12"
Binding="{Binding Path=IngredientName}" />
<DataGridTextColumn Header="Quantite"
Width="*"
FontSize="12"
Binding="{Binding Path=Qty}" />
</DataGrid.Columns>
</DataGrid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
您可以将ViewRecipe
的list组成一个list,然后将其作为Itemssource
传递给ItemsControl
,其中ItemsTemplate
就是您的DataGrid
。
List<List<ViewRecipe>> ViewExtended = new List<List<ViewRecipe>>();
foreach (var r in View)
{
var l = new List<ViewRecipe>();
ViewExtended.Add(l);
}
XAML
<ItemsControl ItemsSource="{Binding Path=ViewExtended}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<DataGrid ItemsSource="{Binding}">
......
</DataGrid>
</DataTemplate
<ItemsControl.ItemTemplate>
</ItemsControl>