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>

Respostas:


171

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


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

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>
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.