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

Respuestas:


171

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


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

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>
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.