我有一个DataGrid,我绑定到我的视图模型中的ObservableCollection,我需要能够对DataGrid进行排序时对集合进行排序,以便我可以在其他地方使用此排序顺序。我目前在ObvservableCollection上使用包装来支持排序。 DataGrid排序时,它只对显示的数据进行排序,而不排序集合中的基础数据。数据由一个整数列和一个字符串列组成,需要支持升序和降序排序。我还希望保持与标准DataGrid排序相同的用法,即单击列标题并在升序和降序之间切换。我对WPF比较陌生,所以我不知道数据和命令绑定的所有细节,但我认为会有办法完成我想要做的事情。这里是一个示例xaml来说明我的视图设置。排序ObservableCollection绑定到MVVM中的DataGrid
<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什么的。我也不希望集合在新项目添加到集合时重新排序。任何新项目都应该像正常情况一样添加到集合的末尾。
任何想法?
我不得不修改这一点在我的MVVM的设置工作,但我得到它的工作。感谢ICollectionView的提示。 – climbak