Come posso ordinare un DataGridTemplateColumn su un DataGrid Toolkit WPF?


92

Ho un WPF Toolkit DataGrid con un DataGridTemplateColumn. Ho specificato in un attributo della griglia che desidero che tutte le colonne siano ordinabili, ma DataGridTemplateColumn non lo consentirà. Tutte le altre colonne consentono l'ordinamento. Ho anche provato a impostare in modo esplicito CanUserSort su true per quella colonna, ma senza fortuna. È anche possibile ordinare una colonna modello? Ho fornito un selezionatore personalizzato che funziona per tutte le colonne, ma l'intestazione non consente un clic di ordinamento.

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

Risposte:


171

È necessario impostare la SortMemberPathproprietà sul Controls:DataGridTemplateColumnnome della proprietà CLR che si desidera ordinare.


2
Funziona perfettamente. Grazie!
Kilhoffer

6
Una parola di avvertimento. Questo non verrà riordinato automaticamente se si modificano i dati sottostanti.
Kelly

1
Un'altra nota: questo può sembrare sciocco, ma se la tua colonna non ha un'intestazione (il titolo) non funzionerà nemmeno: facendo clic sull'intestazione si attiva l'ordinamento. Ho una colonna che non necessitava di un'intestazione e l'ho
risolta

Funzionando come previsto
Harmi

33

Aggiunto SortMemberPath="Name"a DataGridTemplateColumn. Ha iniziato l'ordinamento.

<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>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.