Wie kann ich eine DataGridTemplateColumn in einem WPF Toolkit DataGrid sortieren?

92

Ich habe ein WPF Toolkit DataGrid mit einer DataGridTemplateColumn. Ich habe in einem Rasterattribut angegeben, dass alle Spalten sortierbar sein sollen, aber die DataGridTemplateColumn lässt dies nicht zu. Alle anderen Spalten erlauben das Sortieren. Ich habe sogar versucht, CanUserSort für diese Spalte explizit auf true zu setzen, aber kein Glück. Ist es überhaupt möglich, eine Vorlagenspalte zu sortieren? Ich habe einen benutzerdefinierten Sortierer bereitgestellt, der für alle Spalten funktioniert, aber die Kopfzeile erlaubt keinen Sortierklick.

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

Antworten:

171

Sie müssen die SortMemberPathEigenschaft auf Controls:DataGridTemplateColumnden Namen der CLR-Eigenschaft setzen, nach der Sie sortieren möchten.

rauben
quelle
2
Funktioniert perfekt. Vielen Dank!
Kilhoffer
6
Ein Wort der Warnung. Dies wird nicht automatisch neu sortiert, wenn Sie die zugrunde liegenden Daten ändern.
Kelly
1
Noch ein Hinweis: Das mag albern klingen, aber wenn Ihre Spalte keinen Header (den Titel) hat, funktioniert es auch nicht - ein Klick auf den Header löst die Sortierung aus. Ich habe eine Spalte, die keinen Header benötigte, und ich habe dies durch Setzen von Header = ""
Bokoskokos
Arbeiten wie erwartet
Harmi
33

Zu SortMemberPath="Name"DataGridTemplateColumn hinzugefügt. Es begann zu sortieren.

<data:DataGridTemplateColumn Header="Name" SortMemberPath="Name" CanUserSort="True">
Ferrell
quelle
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
quelle