Datagrid绑定到CollectionView,将一行拆分为两个

时间:2018-05-23 08:30:01

标签: c# wpf mvvm

我有1,2,3,4,5,6,7,8列

前两个是属性,其他是数据 我想将每行拆分为两行并使用标签作为列标题

1,2,3,4,5

1,2,6,7,8

如果我能做到

 1
  2
   3 4 5
   6 7 8

那会更好。但我不知道从哪里开始

1 个答案:

答案 0 :(得分:1)

我的解决方案是使用带有水平堆栈面板的扩展器,用于Column1, 另一个扩展器具有用于Column2的水平堆栈面板,而用于第3列到第8列的扩展器使用数据网格。所有这些内容都是从网格中定义的项控件派生的。 数据本身可以定义为可观察的集合源,可以根据程序需求进行更新。

        <ItemsControl ItemsSource="{Binding Datasource1}">
            <ItemsControl.ItemsPanel>
              <ItemsPanelTemplate>
                <StackPanel >
                </StackPanel>
              </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
            <ItemsControl.ItemTemplate>
              <DataTemplate>
                  <Expander Header="Header1"  >
                                <Expander.HeaderTemplate>
                                    <DataTemplate>
                                            <StackPanel>                                       
                                            </StackPanel>
                                    </DataTemplate>
                                </Expander.HeaderTemplate>
                                <Grid>
                    <ItemsControl ItemsSource="{Binding Datasource2}">
                      <ItemsControl.ItemsPanel>
                        <ItemsPanelTemplate>
                          <StackPanel></StackPanel>
                        </ItemsPanelTemplate>
                      </ItemsControl.ItemsPanel>
                      <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <Expander Header="Header2">
                                <Expander.HeaderTemplate>
                                    <DataTemplate>
                                        <StackPanel>
                                        </StackPanel>
                                    </DataTemplate>
                                </Expander.HeaderTemplate>
                                <DataGrid  ItemsSource="{Binding Datasource3to8}" AutoGenerateColumns="False" >
                              <DataGrid.Columns>
                                <DataGridTextColumn Header="Test"
                                                    Width="Auto"
                                                    Binding="{Binding Datasource3}" />
                                <DataGridTextColumn Header="Test"
                                                    Width="Auto"
                                                    Binding="{Binding Datasource4}" />
                                <DataGridTextColumn Header="Test"
                                                    Width="Auto"
                                                    Binding="{Binding Datasource5}" />
                                <DataGridTextColumn Header="Test"
                                                    Width="Auto"
                                                    Binding="{Binding Datasource6}" />
                                <DataGridTextColumn Header="Test"
                                                    Width="Auto"
                                                    Binding="{Binding Datasource7}" />
                              <DataGridTextColumn Header="Test"
                                                    Width="Auto"
                                                    Binding="{Binding Datasource8}" />
                              </DataGrid.Columns>
                             </DataGrid>
                          </Expander>
                        </DataTemplate>
                      </ItemsControl.ItemTemplate>
                    </ItemsControl>
                  </Grid>
                </Expander>
              </DataTemplate>
            </ItemsControl.ItemTemplate>
          </ItemsControl>

另一种选择是使用层次数据网格。