用的MVVM框架
XML里面DataGrid的部分定义如下:DataGrid绑定数据源GoodsSummaryList
<DataGrid FontSize="12" Name="goodsList" ItemsSource="{Binding GoodsSummaryList}" ......>
<DataGrid.Columns>
<DataGridTextColumn Header="商品类别" Binding="{Binding class_big}" />
<DataGridTextColumn Header="商品编号" Binding="{Binding goods_sn}" />
</DataGrid.Columns>
</DataGrid>
获取数据的方法我直接写到了xml.cs里,获取到数据后,按下paixu按钮,对数据进行排序
public partial class Summary : Window
{
SummaryViewModel sum = null;
public Summary()
{
InitializeComponent();
sum = new SummaryViewModel();
this.DataContext = sum;
}
//......此处省略
private void paixu_Click(object sender, RoutedEventArgs e)
{
ICollectionView view = CollectionViewSource.GetDefaultView(sum.GoodsSummaryList);
view.SortDescriptions.Add(new SortDescription("class_big", ListSortDirection.Ascending));
view.SortDescriptions.Add(new SortDescription("goods_name", ListSortDirection.Ascending));
}
//......此处省略
}
按下按钮之后,界面上确实是按照我的要求,先品类再名称排序了,但是sum.GoodsSummaryList中的数据却还是原来的排列顺序。而我之后打印的数据来源就来自sum.GoodsSummaryList
附上ViewModel的GoodsSummaryList的定义:
private ObservableCollection<goods> goodsSummaryList;
public ObservableCollection<goods> GoodsSummaryList
{
get { return goodsSummaryList; }
set
{
goodsSummaryList = value;
this.RaisePropertyChanged("GoodsSummaryList");
}
}
求助了百度才知道,ICollectionView view对象的排序,过滤及分组.这些功能和数据对象本身是相互独立的,然后我就不知道要怎么更新GoodsSummaryList的排列顺序了。请各位大神指导下,这个问题纠结好久了。
------解决思路----------------------
学学linq 吧。
OrderBy(o => o.class_big)
-》
OrderBy(o => new {
o.class_big,
o.goods_nam
})