处理ObservableCollection中的虚拟项

时间:2014-03-19 17:12:26

标签: c# wpf observablecollection user-experience

在我的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);

我需要改善用户体验,以免发现此延迟。如果我可以消除延迟,那就没有了。

1 个答案:

答案 0 :(得分:2)

您可以在现有集合中进行变异,而不是替换整个ObservableCollection<T>。当您替换整​​个集合时,每个元素的绑定都会刷新 - 如果您更改了集合,只有更改的元素才会刷新其绑定。