Bagaimana cara mengurutkan DataGridTemplateColumn di WPF Toolkit DataGrid?

93

Saya memiliki WPF Toolkit DataGrid dengan satu DataGridTemplateColumn. Saya telah menentukan dalam atribut grid bahwa saya ingin semua kolom dapat diurutkan, tetapi DataGridTemplateColumn tidak mengizinkannya. Semua kolom lainnya memungkinkan pengurutan. Saya bahkan telah mencoba secara eksplisit mengatur CanUserSort ke true untuk kolom itu, tetapi tidak berhasil. Apakah mungkin untuk mengurutkan kolom template? Saya telah menyediakan penyortir kustom yang berfungsi untuk semua kolom, tetapi header tidak mengizinkan klik sortir.

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

Jawaban:

172

Anda perlu menyetel SortMemberPathproperti Controls:DataGridTemplateColumnke nama properti CLR yang ingin Anda sortir.

rampok
sumber
2
Bekerja dengan sempurna. Terima kasih!
Kilhoffer
6
Satu kata peringatan. Ini tidak akan secara otomatis mengurutkan ulang jika Anda mengubah data yang mendasarinya.
Kelly
1
Catatan lain: ini mungkin terdengar konyol, tetapi jika kolom Anda tidak memiliki Header (judul), ini juga tidak akan berfungsi - mengklik tajuk akan memicu pengurutan. Saya memiliki kolom yang tidak memerlukan tajuk dan saya menyortirnya dengan menyetel Header = ""
Bokoskokos
Bekerja seperti yang diharapkan
Harmi
34

Ditambahkan SortMemberPath="Name"ke DataGridTemplateColumn. Ini mulai menyortir.

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