在datagrid中使用group时,列会折叠

时间:2011-06-17 14:50:51

标签: .net wpf datagrid grouping

我有一个数据网格,其中我显示了几个具有一些列的对象。我添加了对数据网格的分组,现在看起来它不像宽度为'*'的colulmns - 列都被折叠到它们的最小宽度。但是,当我刷新网格时(在添加元素或修改现有元素之后),我可以看到列刷新正常。 奇怪的是,我调用了两次相同的函数,第一次它不起作用,而第二次它不起作用。

之前:

http://www.microage-dil.ca/SO/GridBefore.png

更新一次后

http://www.microage-dil.ca/SO/GridAfter.png 这是刷新功能:

Private Sub ListerDocuments()
    Dim lstCVDocuments As New ListCollectionView(_oLstDocuments)
    lstCVDocuments.GroupDescriptions.Add(New PropertyGroupDescription("TypeFichier"))

    GridDocuments.ItemsSource = lstCVDocuments
    GridDocuments.Items.Refresh()
End Sub

现在是datagrid:

<DataGrid x:Name="GridDocuments" Grid.Column="0" ItemsSource="{Binding}" Style="{StaticResource BaseGrid}"  IsTabStop="False">
    <DataGrid.GroupStyle>
        <GroupStyle>
            <GroupStyle.HeaderTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch">
                        <TextBlock Text="{Binding Path=Name}" />
                    </StackPanel>
                </DataTemplate>
            </GroupStyle.HeaderTemplate>
            <GroupStyle.ContainerStyle>
                <Style TargetType="{x:Type GroupItem}">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type GroupItem}">
                                <Expander>
                                    <Expander.Header>
                                        <StackPanel Orientation="Horizontal"  HorizontalAlignment="Stretch">
                                            <TextBlock Text="{Binding Path=Name}" FontWeight="Bold" />
                                        </StackPanel>
                                    </Expander.Header>
                                    <ItemsPresenter />
                                </Expander>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </GroupStyle.ContainerStyle>
        </GroupStyle>
    </DataGrid.GroupStyle>
    <DataGrid.Columns>                            
        <DataGridTextColumn Header="Nom" Width="2*"  MinWidth="150"
                            Binding="{Binding NomFichier}"                                               
                            IsReadOnly="True" />
        <DataGridTextColumn Header="Fichier" Width="3*"  MinWidth="150"
                            Binding="{Binding NomFichierOriginal}"                                               
                            IsReadOnly="True" />
        <DataGridTextColumn Header="Extension" Width="65"  MinWidth="50"
                            Binding="{Binding ExtensionFormate}"                                               
                            IsReadOnly="True" />
        <DataGridTextColumn Header="Date d'ajout" Width="80"  MinWidth="80"
                            Binding="{Binding  DateAjout, StringFormat=yyyy-MM-dd}"                                               
                            IsReadOnly="True" />
    </DataGrid.Columns>                        
</DataGrid>

我在网上得到了分组部分,它似乎工作正常,直到我发现了特定的bug。请注意,我添加了Horizo​​ntalAlignment =“Strech”,因为我虽然可以解决问题,但很明显它没有。

编辑:忘记提及,第一次调用ListerDocument函数时,变量完全加载了文档并在构造函数中调用(New)

1 个答案:

答案 0 :(得分:29)

尝试在DataGrid中指定GroupStyle.Panel。原因是默认的GroupStyle.Panel(StackPanel)不适合DataGrid Width“*”,列将崩溃。

<GroupStyle.Panel>
  <ItemsPanelTemplate>
    <DataGridRowsPresenter/>
  </ItemsPanelTemplate>
</GroupStyle.Panel>