【问题标题】:WPF Window Cold Start - showing black screenWPF 窗口冷启动 - 显示黑屏
【发布时间】:2013-08-06 12:51:12
【问题描述】:

我有一个使用 MVVM 模式的 WPF 应用程序。启动窗口由MenuTitleBarDataGrid 三个控件组成。目前完成所有操作(从服务获取数据,动态生成DataGrid 及其渲染)大约需要 5 秒,然后它会突然显示到 UI。问题是,最终用户在启动程序后必须等待 5 秒钟才能看到窗口。大部分操作与DataGrid相关。所以我将DataGrid 相关代码移动到Window Loaded 事件,现在窗口突然打开但显示黑屏,一段时间后它显示带有数据的DataGrid。

所以我的目标是显示带有MenuTitleBar 的窗口,并在完成初始加载后,执行在后台线程中加载DataGrid 的任务,以便我可以在视图中显示加载面板.完成初始加载后,如何调用与DataGrid 相关的特定方法?

另外,我不能使用启动画面(这是要求)。

请推荐?

【问题讨论】:

  • 使用 ContentRendered 而不是 Loaded
  • 使用 MVVM 将您的数据访问操作转移到后台工作程序中,并提供某种类型的加载图像 gif 或标签来告诉您的最终用户工作正在完成。

标签: c# wpf xaml mvvm


【解决方案1】:

您应该在后台执行任何长时间运行的进程Thread...这将释放您的 UI。如果您不熟悉多线程应用程序,请查看 MSDN 上的 BackgroundWorker Class 页面,因为它提供了代码示例。

另外需要注意的是,您应该将IsAsync="True" 属性添加到BindingDataGrid.ItemsSource 声明中,让它知道它必须等待数据。这样,您的DataGrid 将显示为空,然后当数据准备好时,它将填充。

【讨论】:

  • 除此之外,启动画面可能是一个不错的选择,因此用户在数据加载之前不会盯着空的 UI 控件。有很多关于 SO 的文章,here's one跨度>
  • 不,它只是告诉Binding 对象它应该异步获取和设置值。有关详细信息,请参阅 MSDN 上的 Binding.IsAsync Property 页面。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-17
  • 1970-01-01
  • 1970-01-01
  • 2010-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多