ObservableCollection 分组后排序报错问题

时间:2024-11-05 18:04:11

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 < ) return;
_disCussItems.Move(index, );
}

但是当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 < ) return;
_disCussItems.Move(index, );
vw.GroupDescriptions.Add(new PropertyGroupDescription("TimeGroup"));
}