这是我的内容:
- 一个ListBox,ItemsSource设置为ObservableCollection
- T是自定义类,表示文件,包含两个依赖属性:文件名和缩略图路径。
- ListBox还有一个自定义DataTemplate,用于在下面漂亮地显示图像和文件名。
ListBox的目的是在当前文件夹中(在TreeView中选择)显示视频文件,并显示缩略图(异步生成;不是此问题的一部分)。
所以当我更改TreeView中的文件夹时,ObservableCollection被清除并重新填充,这会自动反映在ListBox项中。
问题是:UI变得无响应,更新需要几秒钟。再次说明,缩略图在这里并不重要(我尝试禁用它们)。 我认为最耗时的是构建50-100个自定义类的实例及其可视化表示——必须为每个对象初始化Image对象。但这只是我的猜测——请问您能否确认或排除这种可能性?
我开始觉得ObservableCollection在这里可能不是正确的选择,因为根据我所读到的和所尝试的,似乎没有办法异步添加项目,至少对于这些项目是DependencyObjects的情况而言。我尝试使用BackgroundWorker创建我的类实例,并将它们添加到集合中的ProgressChanged事件处理程序中,但它会抛出异常(某些线程与依赖关系对象的问题)。
我是否遗漏了什么?或者我最好放弃ObservableCollection,编写一个好的旧异步for循环来添加项目?
所以当我更改TreeView中的文件夹时,ObservableCollection被清除并重新填充,这会自动反映在ListBox项中。
问题是:UI变得无响应,更新需要几秒钟。再次说明,缩略图在这里并不重要(我尝试禁用它们)。 我认为最耗时的是构建50-100个自定义类的实例及其可视化表示——必须为每个对象初始化Image对象。但这只是我的猜测——请问您能否确认或排除这种可能性?
我开始觉得ObservableCollection在这里可能不是正确的选择,因为根据我所读到的和所尝试的,似乎没有办法异步添加项目,至少对于这些项目是DependencyObjects的情况而言。我尝试使用BackgroundWorker创建我的类实例,并将它们添加到集合中的ProgressChanged事件处理程序中,但它会抛出异常(某些线程与依赖关系对象的问题)。
我是否遗漏了什么?或者我最好放弃ObservableCollection,编写一个好的旧异步for循环来添加项目?
Binding, IsAsync = True
是什么意思? - Lei Yang