C# 在WinRT应用程序中使用XAML绑定时,UI线程挂起

C# 在WinRT应用程序中使用XAML绑定时,UI线程挂起,c#,xaml,listview,binding,windows-runtime,C#,Xaml,Listview,Binding,Windows Runtime,我有一个带有两个列表视图的WinRT C应用程序。表示它的一种简单方法是,一个ListView是文件夹位置的列表,第二个ListView详细说明该文件夹内的目录结构: ListView1 ListView2 (Contents of Folder 2) Folder 1 Folder a |Folder 2| File a Folder 3 File b Folder 4 Folder b Folde

我有一个带有两个列表视图的WinRT C应用程序。表示它的一种简单方法是,一个ListView是文件夹位置的列表,第二个ListView详细说明该文件夹内的目录结构:

 ListView1     ListView2 (Contents of Folder 2)
 Folder 1      Folder a
|Folder 2|       File a
 Folder 3        File b
 Folder 4      Folder b
                 Folder c
                   File c
                 File d
差不多吧

我有一个主要的ObservableCollection,它是一个文件夹集合。每个文件夹都包含自己的ObservableCollection,这是第二个ListView中使用的数据

ListView1和2的绑定基本相同:

ItemsSource="{Binding Source={StaticResource folderViewSource}}"
ItemsSource="{Binding Source={StaticResource fileViewSource}}"
将CollectionViewSources定义为:

<!-- The list of folders, used by the main ListView -->
<CollectionViewSource
    x:Name="folderViewSource"
    Source="{Binding FolderBinding}" />

<!-- The files and folders for a specific folder, used by the Files ListView -->
<CollectionViewSource
    x:Name="fileViewSource"
    Source="{Binding ElementName=folderListView, Path=SelectedItem.Files}" />
ListView1填充良好,没有问题

ListView2没有正确绑定它在第一个ListView中显示所选文件夹的文件,但是绑定是在UI线程上完成的。在我的电脑上,这是可以忍受的,如果不愉快。在我的表面上,这可能需要2秒钟

第二个ListView中使用的模板非常精细,但我将其过滤为一个字符串,表面上仍然有点不稳定-显然,我需要将其移出UI线程

我的第一个想法是将绑定从XAML中移开并在代码中进行,但我看不到任何改进的方法-无论我做什么,Windows仍然在UI线程上创建UI元素

我还研究了ISupportIncrementalLoading,但这似乎是为了在滚动时动态加载新项目,等等


我已经被困了一段时间了,有些事情让我很忙,但我想回到这个话题上来,但我想不出来。希望我错过了一些明显的东西。

哇。。。。。他们放弃了WPF而支持WinRT,因为它的速度非常快…@alex-你能展示一下填充第二个ObservableCollection的代码吗?@chue-x-唯一的代码是xaml绑定。第二个CollectionViewSource绑定到第一个ListView中的SelectedItem.Files对象,即:ListView1绑定到Folder类型的ObservableCollection,ListView2绑定到SelectedFolder.Files,后者是另一个ObservableCollection。当我在C中执行此操作时,我只做了基本相同的事情:从第一个ListView中获取所选项目,获取文件集合,然后就是这个。DefaultViewModel[FileBinding]=Files@亚历克斯·哈德威克-我想我错过了什么。您的第二个收藏文件是如何填充的?我说的是数据结构本身,而不是UI。您必须在某个地方有一个函数,用于获取实际文件名/属性并将其放入ObservableCollection,对吗?请注意,启动应用程序时,两个ObservableCollection都会填充数据,左侧列表视图始终显示外部文件夹ObservableCollection中的数据,第二个列表视图显示第一个列表视图中所选文件夹的内容。滞后之处在于,第二个列表中ListView项的所有UI部分都是在UI线程上生成的。