我有一个 DataGrid,我在我的视图模型中绑定到一个 ObservableCollection,我需要能够在 DataGrid 被排序时对集合进行排序,以便我可以在其他地方使用这个排序顺序。我目前在 ObvservableCollection 上使用包装器来支持排序。对 DataGrid 进行排序时,它仅对显示的数据进行排序,而不对集合中的基础数据进行排序。数据由一个整数列和一个字符串列组成,需要同时支持升序和降序排序。我还想保持与标准 DataGrid 排序相同的用法,在该排序中单击列标题并在升序和降序排序之间切换。我对 WPF 比较陌生,所以我不知道数据和命令绑定的所有来龙去脉,但我认为有一种方法可以完成我想做的事情。
<DataGrid ItemsSource="{Binding mySource}"
Name="myDataGrid"
CanUserResizeRows="False"
AutoGenerateColumns="False"
HeadersVisibility="Column" >
<DataGrid.Columns>
<DataGridTemplateColumn Header="Header 1" CanUserSort="True" SortMemberPath="firstValue">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding firstValue}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Header 2" Width="*" CanUserSort="True" SortMemberPath="secondValue">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding secondValue}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
源数据的类型类似于:
public class myType
{
public int firstValue { get; set; }
public string secondValue { get; set; }
// some functions and variables...
}
现在,就像我上面所说的,我需要按排序顺序访问集合中的项目,但它不需要特别是 ObservableCollection。只要我可以在访问集合时以当前顺序遍历集合中的项目,一切都很好。我在想也许是 ListCollectionView 之类的。当新项目添加到集合中时,我也不希望集合重新排序。任何新项目都应该像通常发生的那样添加到集合的末尾。
有任何想法吗?