ObservableCollection通过Move方法可以移动顺序,如下:
将ObservableCollection中的一个item置顶:
private ObservableCollection<GroupListInfo> _disCussItems; private void TopItem(string groupName) { var info = _disCussItems.FirstOrDefault(m => m.GroupName == groupName); if (info == null) return; var index = _disCussItems.IndexOf(info); if (index < 0) return; _disCussItems.Move(index, 0); }
但是当ObservableCollection分组后,
var vw = CollectionViewSource.GetDefaultView(_disCussItems);
vw.GroupDescriptions.Add(new PropertyGroupDescription("TimeGroup"));//按TimeGroup字段分组
Move方法就会出现错误,
大概猜测排序后每个组的index都是在各自的组内,最后只能做一个兼容的操作:
就是在调用Move方法之前,先清空分组;
待move方法完成后,在调用分组功能,具体如下:
private ObservableCollection<GroupListInfo> _disCussItems; private void TopItem(string groupName) { var info = _disCussItems.FirstOrDefault(m => m.GroupName == groupName); if (info == null) return; var vw = CollectionViewSource.GetDefaultView(_disCussItems); vw.GroupDescriptions.Clear(); var index = _disCussItems.IndexOf(info); if (index < 0) return; _disCussItems.Move(index, 0); vw.GroupDescriptions.Add(new PropertyGroupDescription("TimeGroup")); }