1

这是一个推测性的问题,所以没有提供代码。

我有一个应用程序,它采用一个大型 XML 文件并从中构建一个视图以供用户编辑。XML 的加载在后台工作程序中执行,然后通过树视图以非常普通的 MVVM 方式绑定到视图。

这一切都很好,并且在工作人员加载 XML 时会显示一个漂亮的等待光标。

但是,当 XML 文件变得非常大(20M)时,UI 将在绘制新视图期间挂起。这是意料之中的,但这确实意味着应用程序仍然存在的所有视觉提示,以及冻结。目前,一旦在油漆前在工人中完成装载,光标就会改变。是否有用于控件的“paintingHasFinished”类型事件或可以用作句柄的漂亮技巧,以便在此 UI 操作后更改等待光标?

4

2 回答 2

1

您可以使用调度程序逐个或分批添加创建的 ViewModel,以便逐渐添加项目,并且不会在加载操作结束时使测量/布局线程过载。这将增加整体加载时间,但也会增加用户体验。

还要确保打开虚拟化(虚拟化堆栈面板或数据网格上的列/行虚拟化),这将显着提高大型数据集的性能。

于 2011-09-05T14:18:45.820 回答
1

您可以使用 Dispatcher 查看 View 何时完成渲染。

尝试添加这个:

this.Dispatcher.BeginInvoke(DispatcherPriority.Loaded, new Action(() =>
    {
        Cursor = Cursors.Arrow;
    }
));

这挂钩到调度程序,要求它在完成加载时调用回调,使用异步调用。提供的匿名 Action 将被调用,并且应该将您的光标设置为正常。

于 2011-09-05T15:24:34.493 回答