Як я можу відсортувати DataGridTemplateColumn на WPF Toolkit DataGrid?


92

У мене є набір інструментів WPF DataGrid з одним стовпцем DataGridTemplateColumn. В атрибуті сітки я вказав, що хочу, щоб усі стовпці можна було сортувати, але DataGridTemplateColumn цього не дозволяє. Усі інші стовпці дозволяють сортувати. Я навіть намагався явно встановити для CanUserSort значення true для цього стовпця, але не пощастило. Чи можливо взагалі сортувати стовпець шаблону? Я надав спеціальний сортувальник, який працює для всіх стовпців, але заголовок не дозволяє клацнути сортування.

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

Відповіді:


171

Вам потрібно встановити для SortMemberPathвластивості Controls:DataGridTemplateColumnім’я властивості CLR, за якою потрібно сортувати.


2
Працює ідеально. Дякую!
Kilhoffer

6
Одне слово попередження. Це не призведе до автоматичного повторного сортування, якщо ви зміните базові дані.
Kelly

1
Ще одне зауваження: це може здатися безглуздим, але якщо у колонці немає заголовка (заголовка), він також не буде працювати - натискання заголовка запускає сортування. У мене є стовпець, який не потребував заголовка, і я це
розібрав,

Працюємо, як очікувалося
Хармі

33

Додано SortMemberPath="Name"до DataGridTemplateColumn. Почалося сортування.

<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>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.