Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在ObservableCollection中处理虚拟项_C#_Wpf_Observablecollection_User Experience - Fatal编程技术网

C# 在ObservableCollection中处理虚拟项

C# 在ObservableCollection中处理虚拟项,c#,wpf,observablecollection,user-experience,C#,Wpf,Observablecollection,User Experience,在我的WPF应用程序中,我需要实现像windows资源管理器外壳一样的拖放功能。我看过canvas,它非常好,但是因为我们希望项目对齐,所以我们将虚拟项目添加到ObservableCollection中。现在我可以在ObservableCollection中添加虚拟项,也可以在ObservableCollection中交换2个项。问题是,当程序启动时,加载需要时间,因为我添加了虚拟项,在替换项时,会生成一个新的ObservableCollection来替换当前集合。那么如何提高速度呢?要么我能解

在我的WPF应用程序中,我需要实现像windows资源管理器外壳一样的拖放功能。我看过canvas,它非常好,但是因为我们希望项目对齐,所以我们将虚拟项目添加到ObservableCollection中。现在我可以在ObservableCollection中添加虚拟项,也可以在ObservableCollection中交换2个项。问题是,当程序启动时,加载需要时间,因为我添加了虚拟项,在替换项时,会生成一个新的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);
}
静态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连接到属性-这通常是最好的选择。