Como posso classificar um DataGridTemplateColumn em um WPF Toolkit DataGrid?

92

Eu tenho um WPF Toolkit DataGrid com um DataGridTemplateColumn. Especifiquei em um atributo de grade que desejo que todas as colunas sejam classificáveis, mas o DataGridTemplateColumn não permite. Todas as outras colunas permitem classificação. Eu até tentei explicitamente definir CanUserSort como true para essa coluna, mas sem sorte. É mesmo possível classificar uma coluna de modelo? Forneci um classificador personalizado que funciona para todas as colunas, mas o cabeçalho não permite um clique de classificação.

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

Respostas:

171

Você precisa definir a SortMemberPathpropriedade Controls:DataGridTemplateColumncom o nome da propriedade CLR que deseja classificar.

Roubar
fonte
2
Funciona perfeitamente. Obrigado!
Kilhoffer
6
Uma palavra de advertência. Isso não será reclassificado automaticamente se você alterar os dados subjacentes.
Kelly de
1
Outra observação: isso pode parecer bobo, mas se sua coluna não tiver um Cabeçalho (o título), também não funcionará - clicar no cabeçalho aciona a classificação. Tenho uma coluna que não precisa de um cabeçalho e resolvi isso definindo Header = ""
Bokoskokos
Trabalhando como esperado
Harmi
33

Adicionado SortMemberPath="Name"a DataGridTemplateColumn. Ele começou a triagem.

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