在我的WPF应用程序中,我需要实现像Windows资源管理器shell这样的拖放功能。我看过画布并且它非常好但是之后因为我们想要对齐项目,所以进入ObservableCollection中添加虚拟项目。现在我可以在ObservableCollection中添加虚拟项目,并且还能够在Observable Collection中交换2个项目。问题是当程序启动时,加载需要时间,因为我添加了虚拟项目并且在替换项目时,会生成一个新的ObservableCollection来替换当前的Collection。那么如何提高速度呢?我可以解决这个问题,也可能是我正在朝着更换物品的方向前进。有人可以建议吗?
交换ObservableCollection的代码。
static ObservableCollection<T> Swap<T>(IList<T> list, int indexA, int indexB)
{
if (indexA != -1 && indexB != -1)
{
T tmp = list[indexA];
list[indexA] = list[indexB];
list[indexB] = tmp;
}
return new ObservableCollection<T>(list);
}
这就是我所说的:
AppsList = Swap<ItemTemplate>(AppsList, targetIndex, selectedIndex);
我需要改善用户体验,以免发现此延迟。如果我可以消除延迟,那就没有了。
答案 0 :(得分:2)
您可以在现有集合中进行变异,而不是替换整个ObservableCollection<T>
。当您替换整个集合时,每个元素的绑定都会刷新 - 如果您更改了集合,只有更改的元素才会刷新其绑定。