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>

Jawaban:


172

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


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

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>
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.