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>

ItemsSource绑定的每行一个数据网格

您可以将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>