ObservableCollection 分组后排序报错问题

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);  
}
View Code

但是当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"));
}
View Code
原文地址:https://www.cnblogs.com/sczmzx/p/7874175.html