C# 在ObservableCollection中处理虚拟项
在我的WPF应用程序中,我需要实现像windows资源管理器外壳一样的拖放功能。我看过canvas,它非常好,但是因为我们希望项目对齐,所以我们将虚拟项目添加到ObservableCollection中。现在我可以在ObservableCollection中添加虚拟项,也可以在ObservableCollection中交换2个项。问题是,当程序启动时,加载需要时间,因为我添加了虚拟项,在替换项时,会生成一个新的ObservableCollection来替换当前集合。那么如何提高速度呢?要么我能解决这个问题,要么我换东西的方向错了。有人能给我建议吗 交换ObservableCollection的代码C# 在ObservableCollection中处理虚拟项,c#,wpf,observablecollection,user-experience,C#,Wpf,Observablecollection,User Experience,在我的WPF应用程序中,我需要实现像windows资源管理器外壳一样的拖放功能。我看过canvas,它非常好,但是因为我们希望项目对齐,所以我们将虚拟项目添加到ObservableCollection中。现在我可以在ObservableCollection中添加虚拟项,也可以在ObservableCollection中交换2个项。问题是,当程序启动时,加载需要时间,因为我添加了虚拟项,在替换项时,会生成一个新的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);
}
静态ObservableCollection交换(IList列表、int indexA、int indexB)
{
如果(indexA!=-1&&indexB!=-1)
{
T tmp=列表[indexA];
列表[indexA]=列表[indexB];
列表[indexB]=tmp;
}
返回新的ObservableCollection(列表);
}
我这样称呼它:
AppsList = Swap<ItemTemplate>(AppsList, targetIndex, selectedIndex);
AppsList=Swap(AppsList,targetIndex,selectedIndex);
我需要改善用户体验,以便不会注意到这种延迟。如果我能消除延迟,那就没有比这更好的了。您可以在现有集合中进行变异,而不是替换整个
ObservableCollection
。当您替换整个集合时,每个元素的绑定都会被刷新-如果您在适当的位置更改集合,则只有更改的元素才能刷新其绑定。Reed,您能给出一个片段吗?@AsterVeigas只需使用交换元素的现有方法的核心,但是直接在现有的observeableCollection
Perfect上执行。这就是我需要的。我如何在一开始加速我的应用程序,因为我会添加虚拟项目。延迟加载ObservableCollection的解决方案?@AsterVeigas是-在数据准备好之前不要将ObservableCollection连接到属性-这通常是最好的选择。