2014-03-19 48 views
0

在我的WPF应用程序中,我需要实现像Windows资源管理器外壳一样的拖放功能。我看了一下画布,它非常好,但后来因为我们希望项目对齐,所以添加了虚拟物品到ObservableCollection中。现在我可以在ObservableCollection中添加虚拟物品,并且可以在Observable Collection中交换2个物品。问题是当程序启动时,由于我添加了虚拟项目并且替换项目需要一些时间来加载,因此会生成一个新的ObservableCollection来替换当前的Collection。那么如何提高速度?要么我可以解决这个问题,或者可能是我正在朝着错误的方向更换物品。谁能建议?在ObservableCollection中处理虚拟项目

交换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); 

我需要改善用户体验,使这种延迟是没有注意到。如果我能消除这种延迟,那就没有什么了。

回答

2

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

+0

里德,你能给一个片段? –

+0

@AsterVeigas只需使用现有方法的交换元素的胆量,但直接在现有的'ObservableCollection ' –

+0

完美。那就是我需要的。我如何加速我的应用程序,因为我会添加虚拟物品。延迟加载ObservableCollection的解决方案? –