¿Cómo puedo ordenar un DataGridTemplateColumn en un DataGrid de WPF Toolkit?

92

Tengo un DataGrid de WPF Toolkit con un DataGridTemplateColumn. He especificado en un atributo de cuadrícula que deseo que todas las columnas se puedan ordenar, pero DataGridTemplateColumn no lo permite. Todas las demás columnas permiten la clasificación. Incluso intenté establecer explícitamente CanUserSort en verdadero para esa columna, pero no tuve suerte. ¿Es posible ordenar una columna de plantilla? Proporcioné un clasificador personalizado que funciona para todas las columnas, pero el encabezado no permitirá un clic de clasificación.

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

Respuestas:

171

Debe establecer la SortMemberPathpropiedad en Controls:DataGridTemplateColumnel nombre de la propiedad CLR que desea ordenar.

Robar
fuente
2
Funciona perfectamente. ¡Gracias!
Kilhoffer
6
Una palabra de advertencia. Esto no se volverá a ordenar automáticamente si cambia los datos subyacentes.
Kelly
1
Otra nota: esto puede parecer una tontería, pero si su columna no tiene un Encabezado (el título) tampoco funcionará; al hacer clic en el encabezado, se activa la clasificación. Tengo una columna que no necesitaba un encabezado y lo solucioné configurando Encabezado = ""
Bokoskokos
Trabajando como se esperaba
Harmi
33

Agregado SortMemberPath="Name"a DataGridTemplateColumn. Comenzó a clasificar.

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