2010-04-29 8 views
74

J'ai un DataGrid Toolkit WPF avec un DataGridTemplateColumn. J'ai spécifié dans un attribut de grille que je souhaite que toutes les colonnes soient triables, mais DataGridTemplateColumn ne l'autorisera pas. Toutes les autres colonnes permettent le tri. J'ai même essayé de mettre explicitement CanUserSort à true pour cette colonne, mais pas de chance. Est-il même possible de trier une colonne de modèle? J'ai fourni un trieur personnalisé qui fonctionne pour toutes les colonnes, mais l'en-tête ne permettra pas un clic de tri.Comment trier un DataGridTemplateColumn sur un DataGrid Toolkit WPF?

<Controls:DataGrid ItemsSource="{Binding Events}" AutoGenerateColumns="False" 
           CanUserSortColumns="True" 
           CanUserReorderColumns="False" 
           Sorting="DataGrid_Sorting" 
           x:Name="EventsGrid"> 
       <Controls:DataGrid.Columns> 
        <Controls:DataGridTemplateColumn Header="Type" Width="42" CanUserResize="False"> 
         <Controls:DataGridTemplateColumn.CellTemplate> 
          <DataTemplate> 
           <Image Source="{Binding EventTypeImage, Mode=OneWay}" HorizontalAlignment="Center" Width="16"/> 
          </DataTemplate> 
         </Controls:DataGridTemplateColumn.CellTemplate> 
        </Controls:DataGridTemplateColumn> 
        <Controls:DataGridTextColumn Header="Source" 
              Binding="{Binding Source, Mode=OneWay}" /> 
        <Controls:DataGridTextColumn Header="Details" MinWidth="175" 
              Binding="{Binding Details, Mode=OneWay}" /> 
        <Controls:DataGridTextColumn Header="Timestamp" MinWidth="175" 
              Binding="{Binding Timestamp, Mode=OneWay}" 
              IsReadOnly="True"/> 
       </Controls:DataGrid.Columns> 
      </Controls:DataGrid> 

Répondre

134

Vous devez définir la propriété SortMemberPath sur Controls:DataGridTemplateColumn au nom de la propriété CLR que vous voulez trier.

+2

fonctionne parfaitement. Merci! – Kilhoffer

+6

Un mot d'avertissement. Cela ne sera pas automatiquement ré-trier si vous modifiez les données sous-jacentes. – Kelly

+1

Une autre remarque: cela peut sembler stupide, mais si votre colonne n'a pas d'en-tête (le titre), elle ne fonctionnera pas non plus - cliquer sur l'en-tête déclenche le tri. J'ai une colonne qui n'a pas besoin d'un en-tête et j'ai trié cela en définissant Header = "" – Bokoskokos

24

Ajouté SortMemberPath="Name" à DataGridTemplateColumn. Il a commencé à trier.

<data:DataGridTemplateColumn Header="Name" SortMemberPath="Name" CanUserSort="True"> 
11
<DataGridTemplateColumn SortMemberPath="DataDiNascita" Header="Data di nascita" IsReadOnly="True"> 
       <DataGridTemplateColumn.CellEditingTemplate> 
        <DataTemplate> 
         <DatePicker SelectedDate="{Binding Path=DataDiNascita}"></DatePicker> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellEditingTemplate> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <TextBlock Text="{Binding Path=DataDiNascita,StringFormat=\{0:dd/MM/yyyy\}}"></TextBlock> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
Questions connexes