1

現在、データのコレクション (view と呼ばれる) をバインド (itemsource) する XAML ファイルで定義された単一のデータグリッドがあり、これは 1 つの大きなテーブルに表示されます (予想どおり、完全に機能しています)。

ただし、今必要なのは、データグリッドの PER 行を作成することです。これにより、多くのデータグリッドがすべて 1 行のデータを含むことになります。

私が考えることができる唯一のことは次のとおりです:
- データグリッドをコード内で (何らかの方法で) 動的に作成し、XAML から削除します
- これらの動的に作成されたデータグリッドのそれぞれの項目ソースに、たとえば (疑似-コード):

ビューの行ごとに、
新しいデータグリッドを作成
し、行を itemsource バインディングとして割り当てます

誰にもより良い提案がありますか?これは、私が提案している方法でも実行できますか? より良い/より簡単な方法はありますか?

理由 - 顧客は個別のページで各行を印刷したいので、多くのデータグリッドを作成し、それぞれを個別に 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>
4

1 に答える 1

1

のリストのリストを作成してから、あなたであるViewRecipeに渡すことができます。ItemssourceItemsControlItemsTemplateDataGrid

コード:

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>
于 2013-04-20T21:23:28.653 に答える