我想使用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