Comment puis-je trier un DataGridTemplateColumn sur un DataGrid WPF Toolkit?

92

J'ai un DataGrid WPF Toolkit avec un DataGridTemplateColumn. J'ai spécifié dans un attribut de grille que je souhaite que toutes les colonnes soient triables, mais le DataGridTemplateColumn ne le permet pas. Toutes les autres colonnes autorisent le tri. J'ai même essayé de définir explicitement CanUserSort sur 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 permet pas un clic de tri.

<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>
Kilhoffer
la source

Réponses:

171

Vous devez définir la SortMemberPathpropriété sur Controls:DataGridTemplateColumnle nom de la propriété CLR sur laquelle vous souhaitez effectuer le tri.

Rob
la source
2
Fonctionne parfaitement. Merci!
Kilhoffer
6
Un mot d'avertissement. Cela ne sera pas automatiquement trié si vous modifiez les données sous-jacentes.
Kelly le
1
Une autre remarque: cela peut sembler idiot, mais si votre colonne n'a pas d'en-tête (le titre), cela ne fonctionnera pas non plus - cliquer sur l'en-tête déclenche le tri. J'ai une colonne qui n'avait pas besoin d'en-tête et j'ai réglé cela en définissant Header = ""
Bokoskokos
Fonctionnement comme prévu
Harmi
33

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

<data:DataGridTemplateColumn Header="Name" SortMemberPath="Name" CanUserSort="True">
Ferrell
la source
15
 <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>
daniele3004
la source