Làm cách nào để sắp xếp một DataGridTemplateColumn trên một DataGrid của Bộ công cụ WPF?


92

Tôi có một DataGrid của Bộ công cụ WPF với một DataGridTemplateColumn. Tôi đã chỉ định thuộc tính lưới mà tôi muốn tất cả các cột có thể sắp xếp được, nhưng DataGridTemplateColumn sẽ không cho phép điều đó. Tất cả các cột khác đều cho phép sắp xếp. Tôi thậm chí đã thử đặt CanUserSort rõ ràng thành true cho cột đó, nhưng không may mắn. Có thể sắp xếp một cột mẫu không? Tôi đã cung cấp một trình sắp xếp tùy chỉnh hoạt động cho tất cả các cột, nhưng tiêu đề sẽ không cho phép nhấp chuột vào sắp xếp.

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

Câu trả lời:


171

Bạn cần đặt thuộc SortMemberPathtính trên Controls:DataGridTemplateColumnthành tên của thuộc tính CLR mà bạn muốn sắp xếp.


2
Hoạt động hoàn hảo. Cảm ơn!
Kilhoffer

6
Một lời cảnh báo. Điều này sẽ không tự động sắp xếp lại nếu bạn thay đổi dữ liệu cơ bản.
Kelly

1
Một lưu ý khác: điều này nghe có vẻ ngớ ngẩn, nhưng nếu cột của bạn không có Header (tiêu đề) thì nó cũng sẽ không hoạt động - việc nhấp vào tiêu đề sẽ kích hoạt sắp xếp. Tôi có một cột không cần tiêu đề và tôi đã sắp xếp điều này bằng cách đặt Header = ""
Bokoskokos

Làm việc như mong đợi
Harmi

33

Đã thêm vào SortMemberPath="Name"DataGridTemplateColumn. Nó bắt đầu phân loại.

<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>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.