我想使用MVVM設計模式實現我的第一個WPF應用程序。WPF4 Datagrid不在列標題上排序
我創建了一個應用程序,該應用程序綁定到ObservableCollection <>。該應用程序呈現良好,但我希望datagrid重新排序行時,我點擊列標題。
我研究過的帖子說: 數據源必須實現IEnumerable,我的是。 我需要設置CanUserSortColumns和/或CanUserSort(在每一列上),我做過。 我可以通過指定排序回調函數來實現自定義排序,我做到了。
這些都沒有幫助。在調試器中,我的_customerGrid_Sorting函數永遠不會被調用,並且單擊列標題不起作用。
我在接下來的XAML中丟失了什麼嗎?我需要實現另一個接口嗎?我現在感覺很失落,所以任何幫助都是值得讚賞的。
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>
謝謝Guru,這有一點幫助。至少我知道爲什麼默認排序行爲不起作用。我認爲這意味着我需要實施自定義排序。我認爲我可以通過在DataGrid的排序屬性中指定一個處理程序來完成。但我的經理不開火。我期待收到您的代碼示例以給我更多指導。 – 2010-10-05 21:30:12
@Paul - 我想你只是缺少一個名爲「SortMemberPath」的屬性。希望能幫助到你!! – GuruC 2010-10-06 07:28:26
偉大的答案大師!感謝您的幫助!我將通過在DataGridTemplateColumn上指定SortMemberPath =「CustID」(例如)來添加,我可以消除DataGrid上的Sorting屬性,並刪除我自定義的IComparer實現。我的答案幫助別人。如果有人對解決方案有疑問,我會盡力幫助他們。 – 2010-10-06 14:14:57