【发布时间】:2016-07-22 02:25:56
【问题描述】:
在我的主窗口中,我有
- 左侧导航树视图
- 右侧的内容演示者
- 显示加载 gif 的某种“请稍候”面板(宽度和高度约为 50);此面板的可见性绑定到我的主窗口的 viewmodel bool 属性 IsBusy。
这个想法是在内容展示器初始化时显示这个面板。
在树视图中选择一个项目:
- 将布尔属性 IsBusy 设置为 true(因此等待面板带有 加载 gif 显示)
- 设置内容展示器
为了初始化这个内容,我在我的主窗口视图模型中使用了一个任务,以便 UI 保持响应。在这个任务中,当我需要更新 UI 时,我使用 Application.Current.Dispatcher.BeginInvoke 来操作我的 UI 线程。这样,当任务在另一个线程中处理时,我的加载 gif 可以顺利播放。
现在,假设我的内容展示器中有一个包含 20 列的数据网格,它绑定到我的主视图模型中的 ObservableCollection。在我的任务中,如果我向这个集合添加 1000 个项目,当 UI 更新以显示内容时,它会在十分之几秒内变得无响应并且我的 gif 停止;基本上 UI 冻结了。
如何确保等待面板始终保持响应状态并且 gif 保持流畅播放?
【问题讨论】:
标签: wpf user-interface mvvm task freeze