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>

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.


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">

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>
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.