这就是我所拥有的 - 一个 ListBox,其 ItemsSource 设置为 a ObservableCollection<T>
- 其中 T 是我的自定义类,代表一个文件,仅包含 2 个 DependencyProperties:文件名和缩略图路径。- 列表框还定义了一个自定义 DataTemplate,以便在其下很好地显示图像和文件名。
列表框的目的是显示当前文件夹中的视频文件(在 TreeView 中选择),带有缩略图(异步生成;不是这个问题的一部分)。
因此,当我更改 TreeView 中的文件夹时,ObservableCollection 会被清除并再次填充,这会自动反映在 ListBox 项中。
问题出在:用户界面变得无响应,并且需要几秒钟才能更新。同样,缩略图在这里没有意义(我尝试禁用它们)。 我认为花费最多时间的是构建我的自定义类的 50-100 个实例,以及它们的视觉表示 - 它必须为每个实例初始化一个 Image 对象。但这只是我的猜测——您能否确认或排除这种可能性?
我开始认为ObservableCollection 可能不是这里的方法,因为从我阅读的内容和我尝试的内容来看,没有办法异步添加项目,至少如果这些项目是 DependencyObjects。我尝试使用 BackgroundWorker 创建我的类实例并将它们添加到 ProgressChanged 事件处理程序中的集合中,但它会引发异常(一些线程与依赖对象问题)。
有什么我想念的吗?或者我会通过简单地放弃 ObservableCollection 并编写一个好的旧 async for 循环来添加项目会更好吗?