DataGridTemplateColumn

DataGridTemplateColumn

我正在尝试使用MVVM设计模式实现我的第一个WPF应用程序。我创建了一个数据绑定到ObservableCollection 的应用程序。该应用程序呈现良好,但我希望在单击列标题时,数据网格能够对行进行重新排序。我研究过的帖子说:数据源必须实现IEnumerable,而我的则是。我需要设置CanUserSortColumns和/或CanUserSort(在每一列上)。我可以通过指定Sorting回调函数来实现自定义排序。这些似乎都没有帮助。在调试器中,我的_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> (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 问题是这段代码<DataGridTemplateColumn Header="Cust ID" MinWidth="90" CanUserSort="True" > <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Label Content="{Binding Path=CustID}" /> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn>默认排序仅适用于DataGridTextColumn,DataGridComboBoxColumn等。现在,这里的网格不知道如何排序,因为您已在其中定义了一个DataTemplate和一个Label。其他人可能已经在DataTemplate中定义了一个SstackTemplate等。因此,DataGrid将不知道如何对其进行排序。我将尽快为您发布示例代码,因为我们可以为此类DataGridTemplateColumn做些什么。但是希望我给您的方向有所帮助!似乎答案很简单。我使用MVVM在DataGrid示例中进行了尝试,但是我的解决方案应该可以为您工作在下面的DataGridTemplateColumn中,一切都很好,但是您缺少一个非常重要的属性SortMemberPath。 WPF应该知道应该对哪个属性进行排序。您发布的原始图片如下所示 <DataGridTemplateColumn Header="Name" MinWidth="300" CanUserSort="True" Width="*"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Label Content="{Binding Path=Name}" /> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn>我不知道您的数据结构。但是修改后的应该看起来像这样 <DataGridTemplateColumn SortMemberPath="Name" Header="Name" MinWidth="300" CanUserSort="True" Width="*"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Label Content="{Binding Path=Name}" /> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn>希望对您有帮助!!让我知道它是否对您没有帮助,我将尝试在一些博客中发布我的应用程序(尽管我很懒!!)关于wpf - WPF4 Datagrid不在列标题上排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3859712/ (adsbygoogle = window.adsbygoogle || []).push({});
10-09 17:04