Próbuję wdrożyć moją pierwszą aplikację WPF przy użyciu wzorca projektowego MVVM.WPF4 Datagrid nie sortuje nagłówków kolumn
I stworzył aplikację, która jest Databinding do ObservableCollection <>. Aplikacja renderuje się dobrze, ale oczekuję, że datagrid ponownie sortuje wiersze po kliknięciu nagłówków kolumn.
Sprawdziłem posty, które powiedziały: Źródło danych musi implementować IEnumerable, moje robi. Potrzebuję ustawić CanUserSortColumns i/lub CanUserSort (w każdej kolumnie), tak zrobiłem. Mogłabym zaimplementować sortowanie niestandardowe, określając funkcję wywołania zwrotnego sortowania.
Żadne z nich nie pomogło. W debugerze moja funkcja _customerGrid_Sorting nigdy nie zostanie wywołana, a kliknięcie nagłówków kolumn nie przyniesie efektu.
Czy brakuje mi czegoś w XAML, który następuje? Czy jest jeszcze inny interfejs, który muszę wdrożyć? Czuję się teraz bardzo zagubiony, więc każda pomoc jest doceniana.
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>
Dzięki Guru, który pomaga trochę. Przynajmniej wiem, dlaczego domyślne zachowanie sortowania nie działa.Rozumiem, że oznacza to konieczność zaimplementowania niestandardowego sortowania. Które myślałem, że mogę zrobić, określając handler w atrybucie Sortowanie DataGrid. Ale mój przewodnik nie strzela. Czekam z niecierpliwością na otrzymanie próbki kodu, aby dać mi więcej wskazówek. –
@Paul - Myślę, że po prostu brakowało Ci atrybutu o nazwie "SortMemberPath". Mam nadzieję, że to pomoże!! – GuruC
Świetna odpowiedź Guru! Dziękuję za pomoc! Dodam, że poprzez określenie SortMemberPath = "CustID" (na przykład) na DataGridTemplateColumn, byłem w stanie wyeliminować atrybut Sorting w DataGrid i usunąć moją niestandardową implementację IComparer. Ja twoja odpowiedź pomaga innym. Jeśli ktoś ma pytania dotyczące rozwiązania, spróbuję im pomóc. –