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>

Antworten:


171

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


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

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>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.