Tôi đang cố triển khai ứng dụng WPF đầu tiên của mình bằng cách sử dụng mẫu thiết kế MVVM.WPF4 DataGrid không sắp xếp theo tiêu đề cột
Tôi đã tạo một ứng dụng được kết nối với ObservableCollection <>. Ứng dụng hiển thị tốt, nhưng tôi hy vọng DataGrid sắp xếp lại các hàng khi tôi nhấp vào các tiêu đề cột.
Tôi đã nghiên cứu các bài đăng cho biết: Nguồn dữ liệu phải triển khai IEnumerable, của tôi. Tôi cần phải đặt CanUserSortColumns và/hoặc CanUserSort (trên mỗi cột), tôi đã làm. Tôi có thể thực hiện sắp xếp tùy chỉnh bằng cách chỉ định chức năng gọi lại Sắp xếp, tôi đã làm.
Không có cách nào trong số này có vẻ hữu ích. Trong trình gỡ rối, hàm _customerGrid_Sorting của tôi không bao giờ được gọi và nhấp vào các tiêu đề cột không có hiệu lực.
Tôi có thiếu thứ gì đó trong XAML tiếp theo không? Có giao diện nào khác tôi cần triển khai không? Tôi cảm thấy rất mất ngay bây giờ, vì vậy bất kỳ trợ giúp được đánh giá cao.
XAML:
<DataGrid Name="_customerGrid"
AutoGenerateColumns="False"
CanUserSortColumns="True"
ColumnHeaderStyle="{StaticResource columnHeaderStyle}"
HorizontalAlignment="Left"
ItemsSource="{Binding Path=AllCustomers}"
RowDetailsVisibilityMode="VisibleWhenSelected"
RowStyle="{StaticResource DataGridRowStyle}"
SelectionUnit="FullRow"
Sorting="_customerGrid_Sorting"
VerticalAlignment="Top">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Cust ID" MinWidth="90" CanUserSort="True" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Label Content="{Binding Path=CustID}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Name" MinWidth="300" CanUserSort="True" Width="*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Label Content="{Binding Path=Name}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
Cảm ơn Guru, giúp một chút. Ít nhất tôi biết lý do tại sao hành vi sắp xếp mặc định không hoạt động.Tôi lấy nó có nghĩa là tôi cần phải thực hiện một loại tùy chỉnh. Mà tôi nghĩ rằng tôi có thể làm bằng cách xác định một handler trong thuộc tính Sorting của DataGrid. Nhưng người xử lý của tôi không bắn. Tôi mong nhận được mẫu mã của bạn để cung cấp cho tôi nhiều hướng hơn. –
@Paul - Tôi nghĩ bạn chỉ thiếu một thuộc tính có tên là "SortMemberPath". Hy vọng nó giúp!! – GuruC
Câu trả lời tuyệt vời Guru! Cảm ơn sự giúp đỡ của bạn! Tôi sẽ thêm rằng bằng cách chỉ định các SortMemberPath = "CustID" (ví dụ) trên DataGridTemplateColumn, tôi đã có thể loại bỏ các thuộc tính Sorting trên DataGrid và loại bỏ thực hiện tùy chỉnh của tôi của IComparer. Tôi câu trả lời của bạn sẽ giúp người khác. Nếu có ai thắc mắc về giải pháp, tôi sẽ cố gắng giúp họ. –