2011-06-17 10 views
8

Mam datagrid, w którym wyświetlam kilka obiektów z niektórych kolumn. Dodałem zgrupowanie do datagridu i teraz wygląda na to, że nie przypomina kolumn o szerokości "*" - wszystkie kolumny są zwinięte do minimalnej szerokości. Jednak po odświeżeniu siatki (po dodaniu elementu lub zmodyfikowaniu istniejącego) widzę kolumny odświeżające w porządku. Dziwne jest to, że wywołuję tę samą funkcję dwa razy i za pierwszym razem nie działa, podczas gdy drugi to robi.Kolumny są zwinięte podczas używania grupy w datagrid

Przed:

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

Po aktualizacji raz

http://www.microage-dil.ca/SO/GridAfter.png Oto funkcja Refresh:

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

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

A teraz 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> 

Dostałem część grupującą w sieci i wydawało się, że działa dobrze, dopóki nie znalazłem tego konkretnego błędu. Zauważ, że dodałem HorizontalAlignment = "Strech", ponieważ mogłem rozwiązać problem, ale nie było to prawdą.

EDIT: Zapomniałem wspomnieć, pierwszy raz wywołać funkcję ListerDocument, zmienna jest w pełni załadowany z dokumentami i to się nazywa w konstruktorze (nowy)

Odpowiedz

24

próbować określić GroupStyle.Panel w swojej Siatka danych. Powodem tego jest fakt, że domyślny GroupStyle.Panel (StackPanel) nie pasuje do szerokości DataGrid "*", a kolumny będą zwinięte.

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

Wielkie dzięki. Tyle rzeczy o WPF ... –

+0

Wielkie dzięki - uderz ten problem przez wiele godzin i to rozwiązało dokładnie. – WhileTrueSleep

+0

Wow. Dzięki wielkie. WPF. – JohnB

Powiązane problemy