Jak mogę posortować DataGridTemplateColumn w zestawie narzędzi WPF DataGrid?


93

Mam zestaw narzędzi DataGrid WPF z jednym DataGridTemplateColumn. W atrybucie siatki określiłem, że chcę, aby wszystkie kolumny można było sortować, ale DataGridTemplateColumn na to nie zezwala. Wszystkie inne kolumny umożliwiają sortowanie. Próbowałem nawet jawnie ustawić CanUserSort na true dla tej kolumny, ale bez powodzenia. Czy jest w ogóle możliwe sortowanie kolumny szablonu? Udostępniłem niestandardowy sortownik, który działa dla wszystkich kolumn, ale nagłówek nie pozwala na kliknięcie sortowania.

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

Odpowiedzi:


172

Musisz ustawić SortMemberPathwłaściwość na Controls:DataGridTemplateColumnnazwę właściwości CLR, według której chcesz sortować.


2
Działa świetnie. Dzięki!
Kilhoffer

6
Jedno słowo ostrzeżenia. Nie spowoduje to automatycznego ponownego sortowania, jeśli zmienisz dane bazowe.
Kelly

1
Kolejna uwaga: może to zabrzmieć głupio, ale jeśli twoja kolumna nie ma nagłówka (tytułu), to również nie zadziała - kliknięcie nagłówka uruchamia sortowanie. Mam kolumnę, która nie potrzebowała nagłówka i rozwiązałem to, ustawiając Header = ""
Bokoskokos

Działa zgodnie z oczekiwaniami
Harmi

34

Dodano SortMemberPath="Name"do DataGridTemplateColumn. Zaczęło się sortować.

<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>
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.